3

ユーザーが入力した文字列の順列が、単語数の少ないテキストファイル内の有効な単語であるかどうかを確認するつもりです。

文字列を入力した後、何も起こりません!「if」stmtの何が問題になっていますか?また、実行されるelseを作成すると、list.txtに存在する単語を入力しても、制御に到達しません。

これを修正するにはどうすればよいですか?

//check if any permutation of a user inputted word are in a pre defined text file

    #include <iostream>
    #include <fstream>
    #include <vector>

    using namespace std;

    int main(){
        cout<<"Enter a word to check for the presence of any
        << of its permutation in a file \n"; 
        string word; 
        cin>>word; 
        sort(word.begin(), word.end()); 
        vector<string> str; 
        do str.push_back(word);
        while( next_permutation(word.begin(),word.end()) );                  

        ifstream readFile("list.txt");
        string line;
        while(readFile>>line){
              for (int i = 0; i < str.size(); ++i){
                  if(line==str[i]){
                     cout << "found " << str[i] << endl;
                     break;
                  }
              }
        }
        system("pause");
        return EXIT_SUCCESS;
    }
4

3 に答える 3

1

あなたの辞書が非常に巨大でない限り(あなたがそれをすべてメモリに保持できないほど大きい)、私は辞書から単語を読み、コピーを作成し、コピー内の文字を並べ替えてから、それらをペアのベクトルに追加しますソートされた/元の単語。それらをすべて読んだら、ソートされた単語の順にベクトルをソートします。

辞書に(並べ替えられた)単語が含まれているかどうかを確認する場合は、その単語を並べ替えてstd::equal_rangeから、ベクトルで使用して、それに一致するすべての単語を見つけます。

于 2012-10-31T07:16:03.263 に答える
1

順列を実行する必要はありません。

辞書内の各単語の文字を並べ替えて、ユーザーが入力した文字列内の並べ替えられた文字と比較するだけです。複数の単語に一致する場合があります。辞書はペアで保存できます。私はこれを一度行い、後で使用するために保存します。例えば:

addpy paddy
orst sort
cet etc

次に、辞書のペアを最初の(並べ替えられた)単語で並べ替えると、バイナリ検索を使用して、並べ替えられたユーザー文字列をすばやく見つけ、両方向で一致する追加の単語を探すことができます。

于 2012-10-31T07:18:20.573 に答える
0

1)検索する文字列をベクターに保存する必要があります。

vector<string> words_to_search;
sort(word.begin(), word.end()); 
do 
   words_to_search.push_back(word);
while (next_permutation(word.begin(), word.end()));

次に、このようにループすることができます

for (vector<string>::iterator i = words_to_search.begin();
     i != words_to_search.end(); ++i)
{
    string search_word = *i;
    // search for search_word
    ...
}

2)文字列を比較するには、==を使用します。

if (line == search)

lineただし、最初と末尾の空白を削除する必要がある場合があります。

于 2012-10-31T07:14:06.283 に答える