从txt文件读取行后字符串比较失败

时间:2015-03-21 05:33:12

标签: c++ string ifstream

我正在尝试逐行读取文件并将其与代码中的字符串进行比较。但不知何故,下面的代码没有给出预期的结果。在比较期间,我没有遵循我遗漏的内容:

CODE

int main(int argc, char** argv)
{
    std::string filePath="E:\\data\\stopfile.txt";
    std::string line;
    std::ifstream myfile;
    std::string test="ball";
    myfile.open(filePath.c_str());
    if(myfile.is_open()){
        while(getline(myfile,line)){
            std::cout<<line<<std::endl;
            if(!line.compare(test)){
                std::cout<<"SUCCESS"<<std::endl;
            }
            else{
                std::cout<<"FAIL"<<std::endl;
            }
        }
    }
    myfile.close();

    if(!test.compare("ball")){
        std::cout<<"SUCCESS"<<std::endl;
    }
}

输出

apple
FAIL
ball
FAIL
cat
FAIL
SUCCESS

我希望程序在“ball”之后打印SUCCESS。但这种比较似乎并不成功。

我也尝试过比较条件

if(!line.compare(test.c_str())){

结果仍然相同。

1 个答案:

答案 0 :(得分:2)

您似乎正在选择不适合您平台的行结尾。如果我不控制文件的来源,我会经常修剪()数据,因为我使用这样的函数读取它:

https://stackoverflow.com/a/25385766/3807729

const char* ws = " \t\n\r\f\v";

// trim from end (right)
inline std::string& rtrim(std::string& s, const char* t = ws)
{
    s.erase(s.find_last_not_of(t) + 1);
    return s;
}

// trim from beginning (left)
inline std::string& ltrim(std::string& s, const char* t = ws)
{
    s.erase(0, s.find_first_not_of(t));
    return s;
}

// trim from both ends (left & right)
inline std::string& trim(std::string& s, const char* t = ws)
{
    return ltrim(rtrim(s, t), t);
}

// ...

while(getline(myfile,line))
{
    trim(line);
    // ...
}