有人可以解释这个C ++代码吗?

时间:2017-09-02 13:19:29

标签: c++

我是新来的。我不明白if语句:i == 0,它消除了重复。这个怎么运作?感谢。

vector<string>words;
for (string temp; cin >> temp;)
words.push_back(temp);
cout << "Number of words:" << words.size() << '\n';
sort(words);
for (int i = 0; i < words.size(); ++i)
    if (i == 0 || words[i - 1] != words[i])
        cout << words[i] << '\n';

3 个答案:

答案 0 :(得分:0)

如果我等于0,那么你就不能看单词[i-1],因为你不能做单词[-1]

此外,当你使用||时operator,如果第一个表达式为true,则不检查第二个表达式

使用i == 0 || words[i - 1] != words[i],您可以打印您的第一个单词,因为我等于0且表达式words[i - 1] != words[i]未被检查,并且不会导致您的程序崩溃! 然后我与0不同,第一次表达不是真的,第二次是检查。

对于重复部分:

您的数组已排序,因此相同的单词是一个接一个。 然后你必须检查前一个单词是否相同,你可以打印单词

words[i - 1] != words[i]如何运作:

对于std :: string,运算符==!=查找每个字符串的长度,以及字符串中的每个字符

Comparison operator for std::string

此外,words[i-1]会查找前一个单词,并words[i]查找当前单词,以进行比较。

所以在这里,如果两个连续的单词在长度和字母上不相同,则表达式为真。 如果您的数组中有dog cat cat cat_字样,则首先打印dog(因为i == 0部分),第二个打印单词cat,然后表示错误,因为单词相同("cat" == "cat"),最后打印cat_因为与cat不同

答案 1 :(得分:0)

此程序首先对vector strings的所有单词进行排序,并仅打印唯一单词。

i==0表示第一个单词,因为您无法将第一个单词与之前的单词进行比较,因此它始终是唯一的(从之前的单词不存在)

word[i-1]!=word[i]检查当前单词是否与之前打印该单词不同。

||Logical Or运营商。

答案 2 :(得分:-1)

看起来你的程序打印出第一个单词,以及在排序的单词列表中不重复的每个其他单词。如果您尝试查找唯一字词,请尝试使用std::unique