假设相同的字符串之间的比较失败'=='比较

时间:2019-04-16 15:42:59

标签: c++ visual-studio visual-c++

我正在尝试将字典文件读入单词对象的向量,然后对其进行迭代,并将对象的单词与用户输入的内容进行比较。

但是,当在Dictionary :: wordFind()中进行比较时,该单词应与单词对象的单词(例如“ aa”)相同,因此无法正确进行比较。

没有输出错误,由于某些原因,wordFind()中的if语句不会实现。

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();(如上面的dictionary.txt中所示将输出单词“ aaas”),该输出的单词字母之间似乎有空格,如下面的链接所示。 。 (我只是尝试添加图像,但是我没有足够的业力。相信我,这不会是一个讨厌的链接) https://i.ibb.co/t4053Tf/12221222222222121212.png

我不确定为什么会这样,我想知道是否有人知道为什么我的代码会产生这种行为。

任何建议都将不胜感激!

编辑:感谢Paul Sanders对Unicode字符的评论,我重新创建了dictionary.txt,但是将其保存在ANSI中,这似乎已经解决了我的问题。谢谢!

1 个答案:

答案 0 :(得分:0)

由于您使用的是getline,虽然这可能不是您的问题,但您的单词后面可能会有空白,这也将成为词典的一部分。从文件读取时,应使用空格分隔符。

我建议您首先在控制台中输出一个词典词,以使您知道它已正确存储。