istringstream getline中的字符串未正确进行比较

string from istringstream getline not comparing right

本文关键字:比较 getline 字符串 istringstream      更新时间:2023-10-16

我正在读取一个文本文件,然后将文件的第一行"abc"与一个字符串"abc"进行比较,尽管我的日志语句显示它们是相同的,但它们的计算结果并不相等。(正在输出abc!=abc)

我注意到的是,如果我让我的文本文件只有一行,那么它会计算出它们是相等的。

我尝试过使用strcmp或compare函数之类的方法,但得到了相同的结果。我还试着把我的字符串比作"abc",但也没用。

这是我的代码:

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());
}

请注意,字符串可能包含"不可见"字符。值得注意的是,一些系统使用线端序列(例如"rn"序列)来表示线端。如果是这种情况,字符串可能看起来相同,但也包含回车。你可以检查它打印字符串,如下所示:

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

如果有回车,你会得到类似的东西

97 98 99 13 

有点令人困惑的是,你说你看到的输出是

abc=abc

我希望它是

=abc

因为输出将是

abcr=abc

并且CCD_ 2应当将光标重新定位在线的开始处。除非CCLOG()最终删除回车符。