2010-05-13 3 views
1

Есть ли способ сказать istream продолжать движение до тех пор, пока он не достигнет \ n вместо обычного пробела и без использования getline, а также сохранит любые параметры формата в потоке?istream stop at n

Спасибо.

+2

Вы можете использовать фасет. Джерри Коффин представил отличный пример того, как это сделать в ответ на другой вопрос: http://stackoverflow.com/questions/1567082/how-do-i-iterate-over-cin-line-by-line-in- c/1567703 # 1567703 –

+4

Почему вы не хотите использовать 'std :: getline()'? –

ответ

5

Что случилось с std::getline()? Во всяком случае, как о написании собственной функции:

#include <iostream> 
#include <iterator> 

template<class In, class Out, class T> 
Out copy_until(In first, In last, Out res, const T& val) 
{ 
    while(first != last && *first != val) *res++ = *first++; 
    return res; 
} 

// ...  
std::string line; 
copy_until(std::istreambuf_iterator<char>(std::cin), 
      std::istreambuf_iterator<char>(), 
      std::back_inserter(line), '\n'); 
std::cout << line << std::endl; 

Функция будет потреблять символ новой строки, но не будет размещать его на выходе.

+0

Согласовано. OP не сказал 'getline()', но это действительно так, как это делается .... – jwismar

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