2016-03-23 2 views
1

私は大学のプロジェクトの途中で、学生のデータベースのように見えます。テキストファイルの 各行は、この「モデル」、次のとおりです。C++:getline関数を持たない文字列に空白を入れた

age ; full_name ; avg 

私は、テキストファイルを読み込み、構造体のベクトルのすべてを格納する必要があるが、私はその名前だった場合、1つの単語だけを行うことができます。 年齢はintですが、平均はdoubleですが、フルネームはどうですか? file >> full_name;を使用することはできません。full_nameは文字列です。空白になると読み込みが中止されるためです。 getline()関数はすべてを1か所に保存するので、何をすべきかわかりません。

多くの人が指摘したように、あなたは区切り文字までの文字を読み取ることがstd::getlineを使用することができます)この若い心xに

+0

[重関連(http://stackoverflow.com/questions/23047052/why-does-reading-a-record-struct-fields stdistream-fail-and-how-can-i-fi)を使用してください。 –

+1

'std :: getline'はカスタムデリミタを使うことができます。それらは便利なように見えます; – melak47

+0

本当に非常に似た問題です。 しかし、私は解決策が何であるか理解していませんでした。私は単語の可変量を持つことができるので、名前のために複数の文字列を使用したくない。また、ファイルの並べ替えはオプションではありません。 –

答えて

1

をごknowlegdeを共有してください。

出発点として、このコードスニペットを検討:

int age; 
std::string name; 
double average; 

// ... Open the file which stores the data ... 

// then read every line. The loop stops if some of the reading operations fails 
while (input >> age && 
     std::getline(input, name, ';') &&  // consume the first ; 
     std::getline(input, name, ';') &&  // read the name 
     input >> average) { 
    // do whatever you need with the data read 
    cout << "age: " << age << " name: " << name << " average: " << average << '\n'; 
}