Сохранить предложение с пунктуацией в переполнении стека

Я впервые здесь, и я новичок в C ++. Я хотел бы знать, как я могу разделить предложения знаком препинания, когда я читаю из текстового файла.

то есть

hey how are you? The Java is great. Awesome C++ is awesome!

Результат будет таким в моем векторе (при условии, что я поместил endl для отображения каждого содержимого вектора):

  • Эй как вы?
  • Ява отличная.
  • Отличный C ++ — это здорово!

Вот мой код до сих пор:

vector<string> sentenceStorer(string documentOfSentences)
{
ifstream ifs(documentOfSentences.c_str());
string word;
vector<string> sentence;
while ( ifs >> word )
{

char point = word[word.length()-1];
if (point == '.' || point == '?' || point == '!')
{

sentence.push_back(word);
}
}
return sentence;

}

void displayVector (vector<string>& displayV)
{
for(vector<string>::const_iterator i = displayV.begin(); i != displayV.end(); ++i )
{
cout << *i <<endl;
}
}int main()
{
vector <string> readstop = sentenceStorer("input.txt");
displayVector(readstop);
return 0;
}

Вот мой результат:

  • ты?
  • отличный.
  • классно!

Можете ли вы объяснить, почему я не мог получить предыдущее слово и исправить это?

1

Решение

Я дам вам подсказку. В операторе while есть три условия в предложении or. Так что если любой из них выполняется, чем while Заявление не проверять другие. Таким образом, он берет ваш первый и ищет. (Точка). Затем, найдя его, читает его в wordтак что на самом деле он опускает знак вопроса.
Похоже, вам нужно найти другой способ решить эту проблему. Если бы я был тобой, я бы прочитал всю строку и проанализировал ее символ за символом. Насколько я понимаю, нет встроенной строковой функции, которая разделяет слова по разделителю.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]