使用字符串函数将数据从文件读入结构?

时间:2016-02-02 00:36:07

标签: c++ string file struct copy

我有一个文本文件,我想通过使用C ++字符串函数将数据读入结构。文本文件如下所示。

Thor;3.4;3.21;2.83;3.78
Loki;2.89;2.21;2.10;3.33
Sam;3.65;3.78;4.0;3.89
Olivia;2.36;2.75;3.12;3.33
Bruce;3.12;2.4;2.78;3.2

我有一系列学生结构

struct Student
{
    string name;
    double gpa[4];
};

通过在我的一个功能中执行此操作,我成功地读取了所有数据。

for (int counter = 0; counter < numofStudents; counter++)
{
    getline(infile, pointer[counter].name, ';');

    for (int i = 0; i < 4; i++)
    {

        infile >> pointer[counter].gpa[i];

        if (i == 3)
            infile.ignore(4, '\n');
        else
            infile.ignore(4, ';');
    }
}

我遇到的问题是我还必须使用C ++字符串函数提供第二种读取数据的方法。我不允许读取数据,就像我在第二种方法中从上面所做的那样。我必须遵循

的伪代码
  1. 从文件中读取一行
  2. 使用C ++字符串函数查找;
  3. 使用C ++字符串函数将该部分行复制到; 这将是名称字符串
  4. 使用C ++字符串函数查找下一个;
  5. 使用C ++字符串函数复制该行的下一部分; 这将是GPA 1
  6. 继续循环,直到读完所有数据。
  7. 在伪代码的第3部分,我收到一条错误,指出无法从const char *转换为char *。有办法解决这个问题吗?

    string cppstr;
    infile >> cppstr;
    const char* mynewC = cppstr.c_str();
    int position = cppstr.find(";", 0);
    pointer[0].name.copy(mynewC, 0, position);   // this is part 3 that gives the erorr
    

1 个答案:

答案 0 :(得分:1)

这就是substr()的用途。

pointer[0].name=cppstr.substr(0, position);