2013-12-10 38 views
7

我有以下格式的文本文件:我想CIN讀,直到「 n」,但我不能用函數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 :: string :: max_size'作爲'std :: istream :: getline'的第二個參數嗎? –

+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; 
相關問題