C ++中两个字符串的比较

时间:2013-09-19 19:50:51

标签: c++ string compare

当我尝试比较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;

理论上,这应该返回“true”,即这两个字符串是正确的。 temp =“P5”的输出,所以我不明白为什么它每次都会碰到我的其他情况。非常感谢任何帮助!

3 个答案:

答案 0 :(得分:4)

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

您可以在“for”循环后移动打印语句,以查看它所拥有的值,并将与“P5”进行比较。

希望它有所帮助。祝你好运!

答案 1 :(得分:1)

noskipws将把空白字符('\ r','\ n','\ t'等)加载到字符串中。如果你检查temp的长度,由于最后的空格,它可能与comp的长度不同(如果我不得不猜测,我会说它可能是换行符)。

编辑:我在循环中闪烁 - 你不需要它,第二次读取可能是设置pgmFile.bad标志(因为第一次读取将读取整个文件,如果“P5”就是所有它)。

答案 2 :(得分:-3)

似乎std :: string的某些实现有一个成功比较的运算符==(),但这不是通用的,如std::string reference所示。

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

归结为你所测试的平等。 temp和comp是不同的字符串,因此在内存中有不同的地址。简而言之,在这个意义上它们并不相同。

您需要做的是比较字符串中的字符。 String有一个compare()函数来执行此操作,它将返回-1,0或1,具体取决于相对字符串。