基本上给了我一个包含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 "";
}