-8

コードは完全に機能しますが、正確にどのように機能するかについて混乱しています。文字列ベクトルを並べ替える必要がある理由がまったくわかりません。単語をアルファベット順に並べ替えるだけですよね?また、文字列変数「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++;
    }
}
4

2 に答える 2

2

ベクトルは を使用してアルファベット順に並べ替えられているため、sort()重複する単語は隣り合わせになります (それらは同じ単語であり、並べ替えの同じ場所で競合するため)。このようにしてdetect()、隣接する単語のすべてのペアを調べて、その方法で重複を検出できます。ベクトルがソートされていない場合、機能しdetect()ません。

于 2012-10-10T17:18:52.360 に答える
1

回答 1: アルファベット順に並べ替えると、等しい要素が隣り合わせになります。

回答 2:互いに隣接する等しい値のみを取得ますが、並べ替えのため、すべての等しい値が互いに隣接します。

これが役立つことを願っています。

于 2012-10-10T17:31:04.527 に答える