2016-02-02 28 views
0

我有,我想用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++字符串函数在数据读出的第二方法。我不允许在第二种方法中读取数据,例如我是如何从上面完成的。我必须从文件

  • 使用C++字符串函数查找遵循

    1. 读的伪代码在同一行;
    2. 使用C++函数字符串到线路的一部分复制出来直到; 这将是名字符串
    3. 使用C++字符串函数来寻找下一个;
    4. 使用C++函数字符串到下一个部分复制排队的出; 这将是GPA 1
    5. 继续循环,直到所有的数据被读取。

    在伪代码的第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

    这是substr()的用途。

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

    我完全忘了substr()函数。它现在有效。谢谢! – Mark

    +0

    @马克这个工作另一个方便的工具是['的std ::函数getline(INFILE, ';')'](http://en.cppreference.com/w/cpp/string/basic_string/getline)。您可以用任何字符替换行尾的字符。在这种情况下分号。 – user4581301

    相关问题