来自istringstream getline的字符串不能比较正确

时间:2014-11-04 02:59:11

标签: c++ string fstream

我正在阅读一个文本文件,然后将文件的第一行(即" abc")与一个字符串" abc"进行比较。虽然我的日志声明显示它们是相同的,但它们并没有评估相等。 (它输出abc!= abc)

我注意到的是,如果我的文本文件只有一行,那么它会评估它们是否相等。

我尝试过使用strcmp或比较功能,但我得到的结果相同。我也试过制作我的字符串,我正在和#34; abc \ n"那也没有用。

这是我的代码:

string testString = FileUtils::getInstance()->getStringFromFile("test.txt");
istringstream ss(testString);
string s;
string s2 = "abc";

getline(ss, s, '\n');

if(s == s2){
    CCLOG("%s","we are good...");
}
else{
    CCLOG("%s!=%s", s.c_str(), s2.c_str());
}

1 个答案:

答案 0 :(得分:1)

请注意,字符串my包含“不可见”字符。值得注意的是,一些系统使用行结束序列表示行尾,例如"\r\n"序列。如果是这种情况,字符串可能看起来相同但也包含回车符。您可以检查它是否打印字符串:

std::copy(s.begin(), s.end(), std::ostream_iterator<int>(std::cout, " "));

如果有回车,你会得到像

这样的东西
97 98 99 13 

有些令人困惑的方面是你说你看到的输出是

abc=abc

我希望它是

=abc

输出为

abc\r=abc

并且'\r'应该将光标重新定位在行的开头。除非你的CCLOG()最终删除回车字符。