2017-04-11 12 views
0

getlineとstringstreamを一緒に使用してファイルを解析する方法を理解するのは本当に苦労しています。誰かが説明するのを助けることができたら、私は非常に感謝します。非常に。クラス、getline、およびストリングストリームでの解析でのC++演習

私は実際に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

このコードはコンパイルしないでください。将来的には、コード例を変更せずにコンパイルし、すべての#includeを含めてください。

あなたReadFile機能についていくつかのこと:

  • あなたは、変数namessalariesを再定義しています。あなたはおそらくそれを望んでいません。
  • index ++は、index++;である必要があります。
  • ifstream::openはC文字列を受け取りますので、filename.c_str()を渡す必要があります。
  • 最初のgetlineは問題ありませんが、2番目の方法は文字列をフロートに直接コピーしようとしています。明示的に型変換を行う必要があります。 1つの方法は、一時的な文字列変数を作成し、それをgetlineに渡し、std::stofを使用してその文字列をfloatに変換することです。これにはC++ 11が必要です。 C++ 11を使用できない場合は、strtof<cstdilib>から使用できます。
  • ss >> ...が達成しようとしていることがわかりませんが、おそらくそれは欲しがらないでしょう。あなたは、変数名の前に種類が含まれているため

    • あなたはあなたのメンバ変数を再定義している:あなたはあなたの結果を印刷したい場合は、cout << names[index] << ": " << salaries[index] << "\n";

    ような何かごPlayers()コンストラクタについてのいくつかのことをしたいです。タイプを削除します。

  • デフォルトの文字列コンストラクタは空の文字列を作成するため、空の文字列で初期化する必要はありません。
  • {}を初期値の周りに安全にドロップできます。

これらの問題のほとんどは、コンパイラのエラーを調べ、適切なC++ドキュメントを参照することで検出されている可能性があります。つまり、私はC++が始めるのが最も簡単な言語ではなく、早期にポインタを持てるようにするのに役立ちます。それを保つとあなたはそれを得るでしょう!

+0

ありがとうございます!私はそれらをすべて実装しました。私は名前[インデックス]または給与[インデックス]を印刷するのではなく、それらの配列に正しく格納されたファイルからの値を持っています。私は家庭教師からss >> names >>給与が正しい構造であると言われましたが、実際に何をしているのか分かりません。私はfilnameファイルをそれらの2つの配列に解析したいだけです。 – 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

関連する問題