2017-04-11 81 views
0

我一直在努力研究如何一起使用getline和stringstream來解析文件。如果有人能幫忙解釋我會非常感激。非常。C++使用類,getline和stringstream進行分析練習

我真的想要構建函數ReadFile,它是一個函數,它讀入由50個名字和薪水組成的「名稱,工資」格式文本的文件名。我想把它分成名爲:names [] salary []的數組。

我到目前爲止是在下面,我認爲我的類結構是正常的根據提示,但有人可以幫助我正確讀取文件到單獨的數組?謝謝!

class Players { 

    public: 
     //Initialize 
     float salaries[50]; 
     string names[50]; 

     Players(){ 
      for (int i=0; i<50; i++) { 
      float salaries[i]={-1.0}; 
      string names[i]= {""} ; } 
     } 

     void ReadFile(string filename) { 
      ifstream file; 
      file.open(filename); 

      string line; 
      int index=0; 
      while (getline(file, line)) { 
       stringstream ss(line); 
       getline(ss, names[index], ','); 
       getline(ss, salaries[index]); 

       index ++ 
       string names; 
       float salaries; 

       ss >> names >> salaries >> ',';   
      } 
     } 

    float MaxSalary() { 

    } 

    string MaxSalaryName() { 

    } 
}; 
+0

請刪除提示,並將您的問題重新調整到您遇到的代碼示例中的特定部分。 – holocronweaver

+0

沒問題!完成。對不起,雖然提示可能有助於清除混淆。 – Scotchnowplease

回答

1

這段代碼不應該編譯。將來,請確保您的代碼示例無需修改即可編譯,幷包含所有#包含。

ReadFile功能有幾件事情:

  • 您重新定義了你的變量namessalaries。你可能不希望這樣。
  • index ++應該是index++;
  • ifstream::open需要一個C字符串,所以你需要通過filename.c_str()
  • 你的第一個getline是好的,但你的第二個嘗試將一個字符串直接複製到一個浮動。您需要明確地進行類型轉換。一種方法是創建一個臨時字符串變量,將其傳遞給getline,然後使用std::stof將該字符串轉換爲float。這需要C++ 11。如果您不能使用C++ 11,則可以使用<cstdilib>中的strtof
  • 不知道ss >> ...是要達到什麼目的,但你可能不想要它。如果你要打印你的結果,你想要的東西像cout << names[index] << ": " << salaries[index] << "\n";

Players()構造有幾件事情:

  • 您正在重新定義你的成員變量,因爲你有類型的變量名的前面。刪除類型。
  • 默認的字符串構造函數創建一個空字符串,因此不需要用空字符串初始化它。
  • 您可以安全地將{}放在初始值周圍。

通過查看編譯器錯誤,然後查找適當的C++文檔,可能會發現大部分這些問題。也就是說,我知道C++並不是最簡單的語言,它有助於儘早分配指針。堅持下去,你會得到它!

+0

謝謝你這些!我已經實現了他們。我不想打印出[索引]或薪水[索引]的名稱,而是將文件中的值正確存儲在這些數組中。一位導師告訴我,ss >>姓名>>工資是一個正確的結構,但我真的不明白它在做什麼。我只想將filname文件解析到這兩個數組中。 – Scotchnowplease

+0

您已經完成了使用'getline'函數將值讀入數組的功能。您可以通過打印出變量的值並確保它們與期望值匹配來進行檢查。 – holocronweaver

+0

好的。我試圖讓它打印出來,但我發現我不太明白的錯誤。 prog.cpp:在成員函數'void Players :: ReadFile(std :: __ cxx11 :: string)'中: prog.cpp:32:40:錯誤:沒有匹配函數調用'getline(std :: stringstream&,float& )' getline(ss,salaries [index]); – Scotchnowplease