使用C ++中的标点符号存储句子

时间:2013-03-03 20:07:33

标签: c++ punctuation sentence

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

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;
}

这是我的结果:

  • 您?
  • 真棒!

你能解释一下为什么我无法得到上一个字并修复它吗?

1 个答案:

答案 0 :(得分:1)

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