2013-12-10 4 views
7

を使用することはできません。私は「 n」のまで読み取ることがCINたいが、私は、次の形式のテキストファイルを持っているのgetline

info 
data1 data2 
info 
data1 data2 data3 data4... 

問題がある:かもしれデータの数(および長さ)非常に大きく、getline()を使用すると実行時に問題が発生します。だから私はstd::stringにすべての行を読むことができません。私は、次のことを試してみました:

for(int i=0; i<SOME_CONSTANT ; i++){ 
    string info, data; 

    cin >> info; 

    while(cin.peek() != '\n' && cin >> data){ 
     // do stuff with data 
    } 
} 

cin.peek()はトリックをしませんでしたが。情報はwhileループ内のデータに読み込まれ、プログラムは事態を混乱させます。これをどうすれば解決できますか?

+0

'std :: istream :: getline'の第2引数として' std :: string :: max_size'を試しましたか? –

+1

データのサイズはどのように問題になりますか?どのくらいの期間ですか? –

+0

最大150.000文字 – Varaquilex

答えて

7

文字単位で読むことができます。

char ch; 
data = ""; 
cin >> std::noskipws; 
while(cin >> ch && ch != '\n') { 
    if (ch == " ") { 
    // do stuff with data 
    data = ""; 
    continue; 
    } 
    data += ch; 
} 
cin >> std::skipws; 
3

std::getlineの代わりにstd::istream::getlineを使用してください。バッファサイズと区切り文字を選択できます。

関連する問題