将字符串分离到文件中,并将其存储在结构向量中

时间:2018-08-21 22:46:00

标签: c++ file parsing vector input

很抱歉,这个问题的措词很差,但想不出其他任何表达方式(英语不是我的母语)

因此,我正在阅读《加速C ++》一书,并尝试练习5.2。在这里我必须测试2个类似函数的运行时间,其中一个使用列表,另一个使用矢量。我正在尝试读取具有以下格式的1000行的文件:

LPUDPOFK 57 52 66

ONKYTCIL 85 64 43

XMNGQJLL 75 74 70

ETVCUKDI 29 89 94

到std :: vector学生中,我想将行的第一个字符串存储为名称,然后将其存储为mid,fin,grade。

struct Student
{
    std::string name;
    double mid, fin, grade;
    std::vector<double> hw;
};

我尝试使用split函数将文件行拆分为字符串向量。

vector<string> split(const string& s)
{
    vector<string> ret;
    typedef vector<string>::size_type string_size;
    string_size i = 0;

    // invariant: we have processed characters [original i, i)
    while (i != s.size())
    {
        // skips spaces
        while (i != s.size() && isspace(s[i]))
            ++i;
        string_size j = i;

        // goes from first the most current ith character to the next space character
        while (j != s.size() && !isspace(s[j]))
            ++j;
        if (i != j)
        {
            ret.push_back(s.substr(i, j - i));
            i = j;
        }
    }
    return ret;
}

我的主要是

int main()
{
std::ifstream input("1000.txt");
    std::string line;
    std::vector<string> lines;

    while (getline(input, line))
    {
        lines.push_back(line);
    }

    std::vector<Student> students(1000);
    for (std::string::size_type i = 0; i < lines.size(); ++i)
    {
        std::vector<string> ret = split(lines[i]);
        students[i].name = ret[0];
        const char* mid = ret[1].c_str();
        students[i].mid = std::atof(mid);
        const char* fin = ret[2].c_str();
        students[i].fin = std::atof(fin);
        const char* grade = ret[3].c_str();
        students[i].grade = std::atof(grade);
    }

    char c = getchar();
    return 0;
}

当我尝试运行它时,出现错误,提示“调试断言失败” ...“表达式:c> = -1 && c <= 255” 我的代码有什么问题?还有人知道更好的方法吗?

0 个答案:

没有答案