2013-12-10 11 views
7

Ho un file di testo nel seguente formato:Voglio cin a leggere fino a quando ' n', ma non posso usare getline

info 
data1 data2 
info 
data1 data2 data3 data4... 

Il problema è: il conteggio (e lunghezza) dei dati può essere molto grande e causa problemi di runtime quando viene utilizzato getline(). Quindi non riesco a leggere l'intera riga in un std::string. Ho provato quanto segue:

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

    cin >> info; 

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

Tuttavia cin.peek() non ha fatto il trucco. Le informazioni vengono lette nei dati nel ciclo while e il programma mette a posto le cose. Come posso risolvere questo?

+0

Hai provato 'std :: string :: max_size' come secondo parametro per' std :: istream :: getline'? –

+1

Come sarebbe la dimensione dei dati un problema? Quanto sono lunghe le linee? –

+0

fino a 150.000 caratteri – Varaquilex

risposta

7

Puoi provare a leggere caratteri per carattere.

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