hchaithanya Ответов: 2

Ошибка сегментации при печати подсчета количества повторяющихся слов в строке.


Я пытаюсь напечатать дубликат элемента в заданной строке. Ниже приведен мой код:

Я получаю ошибку сегментации.

Тестовый случай=> Если на входе написано "Эй, это я", то программа должна напечатать "это".

Что я уже пробовал:

int main(){
	 char str[30];
	 int n,i;
	 cout<<"enter the size";
	 cin>>n;
	 cout<<"Enter the words";
	 int a[30];
	 for(i=0;i<n;i++)
	 	{
	 		cin<<str[i];

	 	}
	for(i=0;i<n;i++)
	{
		a[str[i]]+=1;
	}
	for(i=0;i<n;i++)
	{
		if(a[i]>1)
		{
			cout<<str[i];
		}
	}
}

2 Ответов

Рейтинг:
1

CPallini

Эй, парень, это C++

#include <string>
#include <iostream>
#include <sstream>
#include <set>
using namespace std;

int main()
{
  string line;
  cout << "please, enter the sentence" << endl;
  getline(cin, line);

  istringstream iss(line);
  set<string> wordset;
  string word;

  while ((iss >> word))
  {
    if ( wordset.find(word) == wordset.end() )
      wordset.insert(word);
    else
      cout << word << endl; // print out the duplicate word
  }
}


Рейтинг:
0

OriginalGriff

Ты уверена, что хотела этого?

cin<<str[i];

Потому что я подозреваю, что вы, возможно, хотели этого:
cin>>str[i];

Затем...это неправильно:
a[str[i]]+=1;
Потому что независимо от значения i, str[i] будет символом, а это значит, что символ пробела будет иметь значение 32, а алфавит намного выше этого: таблица ASCII[^] Так как Ваш массив a имеет только 30 элементов, ни один символ, который вы можете ввести, не приведет к хорошему значению индекса. a

Затем есть задача: даже хорошо и по-настоящему разобравшись, этот код не приблизится к тому, что вам нужно сделать, - это пройти через вашу строку и идентифицировать каждое слово с начала и конца. Затем вы можете использовать эту информацию для идентификации повторяющихся слов.
Сначала попробуйте это на бумаге, и когда у вас есть хороший алгоритм, вы можете попробовать преобразовать его в то, что может понять компьютер. В данный момент вы бросаетесь в код, не думая должным образом о работе в первую очередь - и это просто не работает хорошо для чего-то более сложного, чем "Привет, Мир!"