0

下面的代码从用户那里获取一个单词,然后切换每个字母,它列出了它可以做出的所有可能的组合,我希望过滤掉所有不是单词的结果,我有一个字典和字典中的单词可以使用 GetWord() 抓取;

示例输入admirer 输出married

目前它会做

输入admirer 输出admirre, adminerr...ect

以下代码使这种情况发生。

void Permutations(string input) {
    //sorts input for new word
    sort(input.begin(), input.end());
    do cout << input << endl; while (next_permutation(input.begin(), input.end()));
}

int FindPermutations() {
    string word;
    cout << "Input word: ";
    cin >> word;
    //Runs Premutations with given string
    Permutations(word);
    return 0;
}

所以我的问题是我怎样才能让排列只找到真实的单词?

4

1 回答 1

0

从http://wordlist.sourceforge.net下载英语词典文本文件。或者,如果您使用的是 unix:cat /usr/share/dict/words > words.txt 检查文件中是否存在该单词以判断其是否为真实单词。您可以使用包含文件中每个字母表的第一个单词的起始位置的查找表并跳转到该位置以稍微优化搜索算法。

于 2013-10-03T04:56:31.013 回答