noskipws>>温度; cout,c++,string,compare,C++,String,Compare" /> noskipws>>温度; cout,c++,string,compare,C++,String,Compare" />

C+中两个字符串的比较+; 当我尝试比较C++中的两个字符串(一个从一个文件中读取,另一个被分配一个值)时,我得到一个不正确的输出: ifstream pgmFile; pgmFile.open(fileName); string temp; string comp = "P5"; for(int i = 0; i < 2; i++) { pgmFile >> noskipws >> temp; cout << temp; } if(temp == comp) {} else cout << "File does not contain 'P5'. Please provide the correct type of file." << endl; ifstream pgmFile; 打开(文件名); 字符串温度; 字符串comp=“P5”; 对于(int i=0;i>noskipws>>温度; cout

C+中两个字符串的比较+; 当我尝试比较C++中的两个字符串(一个从一个文件中读取,另一个被分配一个值)时,我得到一个不正确的输出: ifstream pgmFile; pgmFile.open(fileName); string temp; string comp = "P5"; for(int i = 0; i < 2; i++) { pgmFile >> noskipws >> temp; cout << temp; } if(temp == comp) {} else cout << "File does not contain 'P5'. Please provide the correct type of file." << endl; ifstream pgmFile; 打开(文件名); 字符串温度; 字符串comp=“P5”; 对于(int i=0;i>noskipws>>温度; cout,c++,string,compare,C++,String,Compare,最有可能发生这种情况,因为您将值读入temp两次(在第一次for循环中)。第二次读取空字符串(例如,状态应为EOF)。当您打印空字符串时,您看不到它。然后,您将“”与“P5”进行比较,这两种情况并不相同 您可以将printing语句移动到“for”循环之后,以查看它持有的值,这将是与“P5”比较的值 希望有帮助。祝你好运!noskipws将向字符串中加载空白字符(“\r'、“\n'、“\t”等)。如果你检查temp的长度,它可能与comp的长度不同,因为末尾有空格(如果我不得不猜测的话,我会说它

最有可能发生这种情况,因为您将值读入
temp
两次(在第一次for循环中)。第二次读取空字符串(例如,状态应为EOF)。当您打印空字符串时,您看不到它。然后,您将“”与“P5”进行比较,这两种情况并不相同

您可以将printing语句移动到“for”循环之后,以查看它持有的值,这将是与“P5”比较的值


希望有帮助。祝你好运!

noskipws
将向字符串中加载空白字符(“\r'、“\n'、“\t”等)。如果你检查
temp
的长度,它可能与
comp
的长度不同,因为末尾有空格(如果我不得不猜测的话,我会说它可能是换行符)


编辑:我在循环上涂了一层,这是不需要的,第二次读取可能会设置pgmFile.bad标志(因为如果“P5”是其中的全部内容,第一次读取可能会读取整个文件)。

看来std::string的一些实现有一个运算符==()这将成功地进行比较,但这不是通用的,如所示

如果在您的环境中是这种情况,则以下内容适用:

这取决于你测试的相等值。temp和comp是不同的字符串,所以内存中有不同的地址。简言之,它们在这个意义上是不相等的


您需要做的是比较字符串中的字符。字符串有一个compare()函数来执行此操作,该函数将根据相关字符串返回-1、0或1。

确认
temp
确实包含“P5”,而不是,比如说,“P5”。看看这是否提供了一些见解:
cout你的temp中有什么?看起来你读了两次nonskipws istream,你的temp是你读的第二次。如果我有任何代表,我会投票支持你。这正是发生的事情。我将我的“readin”改为“getline”所以我没有覆盖我的字符串。非常感谢!抱歉,你在爪哇思考。C++有一个非常有用的运算符==(),它比较2个字符串。“你需要做的是比较字符串中的字符”这就是<>代码>字符串::运算符=。我想你会发现String::Trace==不通用。看看托勒密,你应该看看那个情况并非总是如此。请给我一个老FoGee,但是当我做C++的STL代码生计的时候,做==关于STD::String是虫子。