2014-02-21 4 views
2

У меня есть istringstream, называемый 'is', и содержит строку «101a0101». Мой код здесь:istream не потребляет персонажей?

cout << is.str() << endl; 

char bit; 
while (is >> bit) { 
    if (bit == '0') /* do stuff */; 
    else if (bit == '1') /* do stuff */; 
    else break; 
} 

cout << is.str() << endl; 

Вот мой выход

output: 
101a0101 
101a0101 

Почему мой istringstream потребляющие символов?

+1

Что именно вы ожидаете, что выход будет? 'str()' возвращает копию последовательности символов * whole *. Он не отображает то, что еще не было прочитано. – 0x499602D2

+0

Я ожидаю, что второй выход (после цикла) будет «a0101», поскольку мой цикл будет потреблять все символы до «a». Разве строка 'while (is >> bit) не удаляет один символ из потока и не помещает его в бит? А если нет, как я могу? – Oxcug

+0

Есть ли 'istream' метод' str'? Вы имели в виду 'istringstream'? –

ответ

5

Доступ к содержимому потока с использованием str() вернет вас тогда целых последовательность символов в буфере. Если вам необходимо получить доступ к непрочитанным подпоследовательностям потока, вы можете использовать substr() с tellg():

std::string unread = is.str().substr(is.tellg()); 
std::cout << unread; // "a0101" 
+1

... или, если вы не возражаете использовать символы из потока: 'std :: string остаток; является << остатком; std :: cout << остаток; ' –

+0

Хорошо, спасибо. Это работает так, как ожидалось. – Oxcug

Смежные вопросы