Сравнение между предположительно идентичными строками, не прошедшими сравнение == - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь прочитать в файле словаря вектор объектов слов, который затем перебираю и сравниваю слово объекта с тем, что было введено пользователем.

Однако, когда сравнение выполняется в Dictionary :: wordFind () со словом, которое должно совпадать со словом объекта слова, таким как «aa», сравнение не выполняется правильно.

Никаких ошибок не выводится, оператор if в wordFind () по какой-то причине просто не выполняется.

dictionary.txt

aa
acronym for Associate in Arts a college degree granted for successful completion of a two-year course of study in arts or general topics;  Alcoholics Anonymous.
n

aaas
the American Association for the Advancement of Science an organization with headquarters in Washington D.C..
n

dictionary.cpp

void Dictionary::loadDictionary() {

    ifstream dicFile("dictionary.txt");
    string word, def, type, whitespace;

    if (dicFile.is_open())
    {
        while (!dicFile.eof())
        {
            getline(dicFile, word);
            getline(dicFile, def);
            getline(dicFile, type);
            getline(dicFile, whitespace);
            Word word1(word, def, type);
            wordObjects.push_back(word1);

        }
        dicFile.close();
    }
}

void Dictionary::wordFind(string wordToFind) {

    for (Word test : wordObjects)
    {
        if (test.getWord() == wordToFind)
        {
            cout << "Word found!" << endl;
            cout << "Word: " << test.getWord() << "\n\n" << "Definition: " << "\n" << test.getDef();
        }
    }
    cout << "Word not found" << endl;
}

word.cpp

Word::Word(string _word, string _def, string _type) {
    word = _word;
    def = _def;
    type = _type;
}

string Word::getWord() {
    return word;
}

string Word::getDef() {
    return def;
}

string Word::getType() {
    return type;
}

main.cpp

int main()
{
    Dictionary dic;
    dic.loadDictionary();
    if (menuChoice == 1)
    {
        string wordSearch;
        cout << "Please enter your word: " << endl;
        cin >> wordSearch;
        dic.wordFind(wordSearch);
}

Я заметил, используя cout << wordObjects[2].showWord(); (который выведет слово "aaas", как показано в приведенном выше словаре dictionary.txt), что в выводе, похоже, есть пробелы между буквами слова, как показано в ссылке ниже. (Я пытался просто добавить изображение, но мне не хватает кармы. Поверьте мне, это не будет неприятной ссылкой) https://i.ibb.co/t4053Tf/12221222222222121212.png

Я не уверен, почему это происходит, и мне интересно, есть ли у кого-нибудь идея, почему мой код будет вызывать такое поведение.

Любой совет с благодарностью!

РЕДАКТИРОВАТЬ: Благодаря комментарию Пола Сандерса о символах Unicode я заново создал файл dictionary.txt, но сохранил его в формате ANSI, и, похоже, он решил мою проблему. Спасибо!

1 Ответ

0 голосов
/ 16 апреля 2019

Поскольку вы используете getline, хотя это может и не быть вашей проблемой, после ваших слов могут быть пустые места, которые также станут частью вашего словаря.Вы должны использовать разделитель пустого пространства при чтении из файла.

Я предлагаю сначала вывести слово из словаря в вашу консоль, чтобы вы знали, что оно сохранено правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...