为什么比较两个字符串的结果遗漏了最后匹配的字符串



I比较csv文件中的两个字符串。由于解析csv文件的结果是获得用逗号分隔的数据行。

编码工作正常,但无法显示最后匹配的行。

CSV文件内容:

Title,sn,sn,sn
test,123,344,222
test,123,344,222
test,123,344,222
test,123,344,222
test,456,677,223
test,5,4545,32
apple,23,44,22
apple,323,23,22

例如,我的代码只显示了下面缺少最后一行的内容,

Title,sn,sn,sn
test,123,344,222
test,123,344,222
test,123,344,222
test,123,344,222
test,456,677,223

而不是

Title,sn,sn,sn
test,123,344,222
test,123,344,222
test,123,344,222
test,123,344,222
test,456,677,223
test,5,4545,32

代码如下:

int main()
{
    string line;
    ifstream file("sample.csv");
    if(!file)
    {
        cout << "Error, could not open file." << endl;
        return -1;
    }
    while(getline(file, line))
    {
        stringstream ss(line);
        string line2;
        getline(file, line2, ',');
        string str = "test";
        if(line2 == str)
        {
            cout << line << endl;
        }
    }
}

每个循环都会有一行,还有后面的一行。当循环到达最后一行时,后面没有一行,所以与"test"的比较永远不会成立,因为你已经在看最后一行了。如果您将第二个getline更改为getline(ss, line2, ',');,那么现在您在每个循环中只看到一行,因为您从ss而不是文件中提取了每行的第一部分(但跳过了带有Title,sn,sn,sn的第一行。)要跳过检查第一行(如果该行是标题),您可以在循环之前添加一个额外的getline(file, line);

相关内容

  • 没有找到相关文章

最新更新