基本上给了我一个包含100个单词的数据文件,我的任务是对一个字谜查找器进行编程,以查找该数据文件中的字谜。一旦找到了字谜,我就会努力编写代码以打印出数据文件中的单词。

我已经设法将字符串按字母顺序排序以进行比较,并且我做了一个if语句来说当前单词是否与原始字符串相同,然后打印出该单词。

如果这个问题听起来令人困惑,我深表歉意,我已经坚持了几天,而且根本无法解决这个问题。

string FindAnagram(string originalString) {
string currentWord;
string localString;
localString = originalString + currentWord;

ifstream dbFile;
dbFile.open(cDATAFILE);

while(!dbFile.eof()){
    getline(dbFile, currentWord);

      sort (currentWord.begin(), currentWord.end());
      sort (originalString.begin(), originalString.end());

if(currentWord == originalString){
          cout << "\n\t Anagram of the current word: " << localString << endl;
        }
        else {
          cout << "\n\t No anagram available." << endl;
        }

    }
dbFile.close();
return currentWord;
}

例如,如果currentWord是“alert”,那么它将读取数据文件并打印出单词“alert”的字谜词,但我正在努力使其输出数据文件中的单词。

例如,预计“稍后”将被打印出来,而“警告”则被打印出来。

提前致谢。

最佳答案

您不再在数据文件中包含单词,因为您已使用sort操作对其进行了变异。

只需在执行该操作之前复制字符串,即可获得原始字符串。

顺便说一句,localstring很奇怪;当currentWord为空时,为什么还要附加currentWord

而且您不需要一遍又一遍地排序originalString

std::string FindAnagram(const std::string& originalString)
{
    std::string originalStringSorted = originalString;
    std::sort(originalStringSorted.begin(), originalStringSorted.end());

    std::ifstream dbFile(cDATAFILE);
    std::string currentWord;
    while (std::getline(dbFile, currentWord))
    {
       std::string currentWordSorted = currentWord;
       std::sort(currentWordSorted.begin(), currentWordSorted.end());

       if (currentWordSorted == originalStringSorted)
       {
          std::cout << "Found '" << currentword << "' to be an anagram of '"
              << originalString << "'\n";
          return currentWord;
       }
    }

    std::cout << "No anagram found\n";
    return "";
}

07-24 09:44