当我在键盘上写一个句子时,我正在尝试计算单词的数量,但重复的单词应该只计算一次。句子必须以特定字符串结尾,在这种情况下我将使用“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 ++文档。”
我的代码出了什么问题?
答案 0 :(得分:0)
您需要颠倒while
子句中的条件顺序:
while (i<sentence.size() && input!= sentence[i])
那是因为,当数组sentence
仍为空时,第一个比较i<sentence.size()
将失败;整个条款也是如此,而无需检查input!=sentence[i]
,sentence
为空时没有意义。