矢量循环没有达到所有元素

时间:2012-06-29 20:27:12

标签: c++ loops vector

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

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.

但它永远不会达到最后一组词。我改变了我的循环,只打印出矢量中的每个元素,它确实打印出所有元素。但由于某种原因,这个循环不想达到最后一组词。出了什么问题?

2 个答案:

答案 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.";
}