3

我打算找出用户输入字符串的任何排列是否是文本文件中的有效单词,单词很少。

输入字符串后,没有任何反应!“如果” 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 回答