我正在尝试将字典文件读入单词对象的向量,然后对其进行迭代,并将对象的单词与用户输入的内容进行比较。
但是,当在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中,这似乎已经解决了我的问题。谢谢!
答案 0 :(得分:0)
由于您使用的是getline,虽然这可能不是您的问题,但您的单词后面可能会有空白,这也将成为词典的一部分。从文件读取时,应使用空格分隔符。
我建议您首先在控制台中输出一个词典词,以使您知道它已正确存储。