代码完美无缺,但我对它究竟是如何工作感到困惑。我无法理解为什么我们需要对字符串向量进行排序。它只是按字母顺序排序,对吧?另外,当我们将它与字符串变量“Previous”进行比较时,它如何检测任何单词而不仅仅是相邻单词
#include <iostream>
#include <vector>
using namespace std;
void detect(vector<string> vs);
int main() {
vector<string> vs;
string current;
while (cin>>current)
vs.push_back(current);
sort(vs.begin(), vs.end());
detect (vs);
system("pause");
}
void detect(vector<string> vs){
string previous = " ";
int index = 0;
while (index < vs.size()) {
if (vs[index]==previous) {
cout<<"repeated words: " <<previous<< endl;
}
previous = vs[index];
index++;
}
}
答案 0 :(得分:2)
由于使用sort()
按字母顺序对矢量进行排序,因此任何重复的单词将彼此相邻(因为它们是相同的单词并且将在排序中争用相同的点)。这样detect()
就可以查看所有相邻单词对并以这种方式检测重复单词。如果向量未排序,则detect()
将无效。
答案 1 :(得分:1)
答案1:如果按字母顺序排序,任何相同的元素将彼此相邻。
答案2:确实只获得彼此相邻的相等值,但由于排序,所有相等的值将彼此相邻。
我希望这会有所帮助。