计算键盘上的单词。不计算重复

时间:2014-04-18 20:16:58

标签: c++ cin

当我在键盘上写一个句子时,我正在尝试计算单词的数量,但重复的单词应该只计算一次。句子必须以特定字符串结尾,在这种情况下我将使用“eof”。 例如,当我输入:“这是一个单词,这个单词eof”结果应该是4个单词。

我的代码是:

#include <iostream>
#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main() {
    string input;
    vector<string> sentence;
    int n=0;

    while (cin >> input && input!="eof")
    {int i=0;
        while (input!= sentence[i] && i<sentence.size())
        {
        i++;
        }
        if (i==sentence.size())
            sentence.push_back(input);

    }
    cout << "\nNumero de palavras: " << sentence.size();

    return 0;
}

代码编译没有任何错误,但是当我运行它时,它显示:“表达式:向量下标超出范围。有关程序如何导致断言失败的信息,请参阅关于断言的Visual C ++文档。”

我的代码出了什么问题?

1 个答案:

答案 0 :(得分:0)

您需要颠倒while子句中的条件顺序:

while (i<sentence.size() && input!= sentence[i])

那是因为,当数组sentence仍为空时,第一个比较i<sentence.size()将失败;整个条款也是如此,而无需检查input!=sentence[i]sentence为空时没有意义。