2016-02-02 57 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

    相關問題