2013-12-10 11 views
7

ich eine Textdatei in folgendem Format haben:möchte ich cin bis ‚ n‘ lesen, aber ich kann nicht verwenden getline

info 
data1 data2 
info 
data1 data2 data3 data4... 

Das Problem ist: die Zahl (und Länge) der Daten sein kann sehr groß und verursacht Laufzeitprobleme, wenn getline() verwendet wird. Also kann ich die ganze Zeile nicht in eine std::string lesen. Ich habe versucht, die folgenden:

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

    cin >> info; 

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

jedoch cin.peek() nicht den Trick tat. Die Informationen werden in die while-Schleife eingelesen und das Programm versäumt Dinge. Wie kann ich das beheben?

+0

Haben Sie 'std :: string :: max_size' als zweiten Parameter für' std :: istream :: getline'? –

+1

Wie wäre die Größe der Daten ein Problem? Wie lang sind die Linien? –

+0

bis zu 150.000 Zeichen – Varaquilex

Antwort

7

Sie können versuchen, Zeichen für Zeichen zu lesen.

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