我正在尝试逐行读取文件并将其与代码中的字符串进行比较。但不知何故,下面的代码没有给出预期的结果。在比较期间,我没有遵循我遗漏的内容:
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())){
结果仍然相同。
答案 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);
// ...
}