1

这是我第一次来这里,我是 C++ 的初学者。我想知道在阅读文本文件时如何用标点符号分割句子。

IE

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

结果将在我的向量中出现(假设我已将 endl 用于显示向量的每个内容):

  • 嘿,你怎么样?
  • Java很棒。
  • 很棒的 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;
}

这是我的结果:

  • 你?
  • 伟大的。
  • 惊人的!

你能解释为什么我不能得到前一个词并修复它吗?

4

1 回答 1

1

我会给你一个线索。在 while 语句中,or 子句中有三个条件。因此,如果其中任何一个得到满足,while则不要检查其他声明。所以它需要你的第一个并寻找 . (点)。然后在找到它之后,将它读入word,所以实际上它省略了问号。看来您需要找到其他方法来解决此问题。如果我是你,我会阅读整行并逐个字符地解析它。就我而言,没有内置的字符串函数可以按分隔符分割单词。

于 2013-03-03T20:59:45.343 回答