Читая файл данных, как мне найти анаграммы ввода строки пользователя? - PullRequest
1 голос
/ 30 марта 2019

По сути, мне дали файл данных, который содержит 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», но я изо всех сил пытаюсь заставить его распечатать слово в файле данных. .

Например, ожидается, что будет напечатано «позже», но вместо этого будет напечатано «предупреждение».

Заранее спасибо.

1 Ответ

0 голосов
/ 30 марта 2019

У вас больше нет слова * в файле данных , потому что вы изменили его с помощью операции сортировки.

Просто скопируйте строку, прежде чем сделать это, чтобы у вас все еще был оригинал.

Кстати, 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 "";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...