0

我有以下一段代码,它接收一些单词,将它们存储到一个向量中,对它们进行排序,然后计算每个单词出现的次数并输出它:

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.

但它永远不会到达最后的一组单词。我将循环更改为仅打印出向量中的每个元素,并且确实打印出所有元素。但是由于某种原因,这个循环不想到达最终的单词集。出了什么问题?

4

2 回答 2

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

然后循环退出。因此,您需要循环外的最后一行来打印最后一个单词及其计数。

于 2012-06-29T20:30:55.233 回答
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.";
}
于 2012-06-29T20:31:05.923 回答