无法匹配从文件解析的信息中的字符串

时间:2015-02-21 08:54:03

标签: c++11

我正在努力了解这里发生的事情,我从我正在制作的计划中做出这一点来展示正在发生的事情。当我将它们与字符串进行比较时,从文本文件中提取的字符串不匹配。但硬编码数据会。

这个程序应该显示:

failed again
failed again
success
success

但是没有,它无法匹配a55555555的第一个实例。我发现这只发生在我从文件中提取的信息上,所以我想我在导入过程中一定做错了但我能找到什么。 实际输出:

failed again
failed again
failed again
success

文件(student.txt):

a22222222
a11111111
a55555555

代码:

#include <vector>
#include <iostream>
#include <fstream>
using namespace std;

class Student {
    public:
        void display(ostream& os) const;
        void setId(string);
        string getId();     
    private:
        string id_;
};

void Student::setId(string id) {
    id_ = id;
}

string Student::getId() {
    return id_;
}


int main () {

    vector <Student> vStudent;
    int count = 0;
    string line;
    ifstream infile("student.txt");

    while (getline(infile, line)) {
        vStudent.push_back(Student());
        vStudent[count].setId(line);
        count++;
    }

    vStudent.push_back(Student());
    vStudent[count].setId("a55555555");

    string test = "a55555555";
    for (auto & element : vStudent) {
        if (test == element.getId())
            cout << "success" << endl;
        else
            cout << "failed again" << endl;
    }   
}

1 个答案:

答案 0 :(得分:0)

嗯,首先,复制代码和测试数据,我得到了预期的正确结果。那可能会出现什么问题?

我怀疑这是一个行尾字符问题。例如,如果student.txt文件是在DOS / Windows环境中创建的,并且具有CR + NL样式的行尾字符,那么您所读取的行表示Unix环境将包含那些CR字符,因此匹配将失败。

它可能更简单:这些线的末端或其中一些可能有白色空间,在这样的事情出错之前很难注意到。

然后可能的修复方法是在设置id之前从每条读取行中删除所有尾随空格,例如:

#include <cctype>
/* ... */
    while (getline(infile, line)) {
        vStudent.push_back(Student());
        while (!line.empty() && std::isspace(line.back())) line.pop_back();
        vStudent[count].setId(line);
        count++;
    }
/* ... */

这将捕获虚假空间,以及任何错误的尾随回车。