2013-12-10 2 views
7

У меня есть текстовый файл в следующем формате:Я хочу 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 :: 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;