我是新来的。我不明白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';
答案 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
。