gpt4 book ai didi

C++ STL Map - find(pair) 在 Windows Visual Studio 中有效,但在 Linux 中不适用于 g++!

转载 作者:行者123 更新时间:2023-11-30 01:30:00 24 4
gpt4 key购买 nike

我似乎无法在不同平台上将 find() 与 STL 映射一起使用。这是我要完成的代码:

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <string>
#include <map>

using namespace std;

void constructDictionary(map<string,bool> &dict);
bool isInDictionary(string word, map<string,bool> &dict);

int main(void)
{

map<string, bool> dictionary;
constructDictionary(dictionary);
map<string, bool>::iterator it = dictionary.begin();

while(it != dictionary.end()){
cout << it->first <<endl;
it++;
}

string word;
while(true){
cout << "Enter a word to look up: " << endl;
cin >> word;
if(isInDictionary(word, dictionary))
cout << word << " exists in the dictionary." << endl;
else
cout << word << " cannot be found in the dictionary." << endl;
}

return 0;
}

void constructDictionary(map<string,bool> &dict)
{
ifstream wordListFile;
wordListFile.open("dictionaryList.txt");
string line;

while(!wordListFile.eof()){
getline(wordListFile, line);
dict.insert(pair<string,bool>(line, true));
}

wordListFile.close();
}

bool isInDictionary(string word, map<string,bool> &dict)
{
if(dict.find(word) != dict.end())
return true;
else
return false;
}

isInDictionary() 如果在 Windows 中使用 visual studio 进行编译,则工作正常,但是,在 ubuntu 和 g++ 上,这仅适用于 map 中的最后一个条目。我查询的任何其他词都会返回 false。我不明白这种行为的差异。在这两种情况下,main 开头的 while 语句都正确打印出 map 中的所有内容,以证明一切都在那里。

有什么想法吗?谢谢。

最佳答案

  • while (!eof) 是错误的。使用 while (getline(...))
  • 您需要处理 Windows 换行 \r\n。可能您的词典是在 Windows 上生成的,并且最后一行没有换行符,所以除了最后一个单词之外的所有单词的末尾都有一个隐藏的 \r

关于C++ STL Map - find(pair<string,bool>) 在 Windows Visual Studio 中有效,但在 Linux 中不适用于 g++!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5140239/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com