我有一段代码,它接受一些单词,将它们存储到一个向量中,对它们进行排序,然后计算每个单词出现的次数并输出它:
typedef vector<double>::size_type vec_sz;
vector<string> words;
string c;
cout << "Enter some words!" << endl << endl;
while (cin >> c) {
words.push_back(c);
}
vec_sz size = words.size();
sort(words.begin(), words.end());
string current_word = words[0];
int count = 1;
for (int i = 1; i < size; i++) {
if (words[i] == current_word) {
count++;
}
else {
cout << "The word " + current_word + " appears " << count << " times." << endl;
current_word = words[i];
count = 1;
}
}
我输入一些词语:
word
word
lol
hello
lol
word
hello
^Z
然后我得到以下输出:
The word hello appears 2 times.
The word lol appears 2 times.
但它永远不会达到最后一组词。我改变了我的循环,只打印出矢量中的每个元素,它确实打印出所有元素。但由于某种原因,这个循环不想达到最后一组词。出了什么问题?
答案 0 :(得分:3)
到达最后一个字,在这里:
else {
// Previous word printed
cout << "The word " + current_word + " appears " << count << " times." << endl;
// current_word set to last word
current_word = words[i];
count = 1;
}
然后循环退出。因此,您需要在循环外部输出最后一行来打印最后一个单词及其计数。
答案 1 :(得分:2)
只有在找到不同的单词时才会打印计数消息。找到最后一个单词时,不会遇到不同的单词,因此不会打印消息。在for
后需要一段代码才能打印出最后一个单词的计数。
还有其他方法可以实现这一点,例如使用std::map<std::string, unsigned int>
:
map<string, unsigned int> word_counts;
string c;
cout << "Enter some words!" << endl << endl;
while (cin >> c) {
word_counts[c]++;
}
for (map<string, unsigned int>::iterator wci = word_counts.begin();
wci != word_counts.end();
wci++)
{
cout << "The word " << wci->first << " appears " << wci->second << "times.";
}