使用std :: string.compare()不会工作

时间:2015-05-23 19:55:46

标签: c++ compare stdstring

我对以下代码有一点问题:

std::string compare = "data_END";
while ((!(temp.compare(compare) == 0)) && std::getline(file, temp)) {
    std::size_t pos = temp.find(' ');
    std::string name = temp.substr(0,pos);
    std::string number = temp.substr(pos);

...

所以,有一点在文件中有一行名为" data_END"。 它正确读取,因为我可以在调试选项中看到。但是.compare()方法不会返回0.因为我使用visual Studio我也可以看到细节,字符串之间的所有内容似乎都是相同的容量。在temp中它是31并且在比较中它是15.这是否会产生它们之间的区别?我自己无法获得任何进一步的帮助,我将不胜感激,

谢谢你们! :)

1 个答案:

答案 0 :(得分:1)

尝试重写此声明:)

while ((!(temp.compare(compare) == 0)) && std::getline(file, temp)) {

while ( std::getline(file, temp) && !( temp.compare(compare) == 0) ) {

首先,您必须在字符串temp中读取该行的一行,然后才将其与字符串compare进行比较。

另一个问题可能是文本文件中的CR符号。也就是说,每一行以对CR('\ r')+ LF('\ n')结束。在这种情况下,您应该从字符串temp中删除它。

例如,你可以写

while ( std::getline(file, temp) && !( temp.compare(0, compare.size(), compare) == 0) ) {