Есть ли способ сказать istream продолжать движение до тех пор, пока он не достигнет \ n вместо обычного пробела и без использования getline, а также сохранит любые параметры формата в потоке?istream stop at n
Спасибо.
Есть ли способ сказать istream продолжать движение до тех пор, пока он не достигнет \ n вместо обычного пробела и без использования getline, а также сохранит любые параметры формата в потоке?istream stop at n
Спасибо.
Что случилось с 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;
Функция будет потреблять символ новой строки, но не будет размещать его на выходе.
Согласовано. OP не сказал 'getline()', но это действительно так, как это делается .... – jwismar
Вы можете использовать фасет. Джерри Коффин представил отличный пример того, как это сделать в ответ на другой вопрос: http://stackoverflow.com/questions/1567082/how-do-i-iterate-over-cin-line-by-line-in- c/1567703 # 1567703 –
Почему вы не хотите использовать 'std :: getline()'? –