savostin
@savostin
Еще один программист

Как считывать построчно данные из буфера?

Что-то тупизна накатила.
Есть считанный из файла/инета/порта буфер (варианты: char*/std::string/std::stringstream):
1. Съешь ещё этих мягких французских булок
2. Съешь ещё этих мягких французских булок
3. Съешь ещё этих м

Нужно извлечь из него каждую полную строку (1, 2), сделать с ней всякое и оставить в буфере неполную (3), чтобы следующая операция чтения дописала
ягких французских булок
4. Съешь ещё этих мягких французских булок
5. Съешь ещ

и получить 3, 4 и т.д. строки.
С++98 к сожалению и без всяких там Boost'ов :(
Понимаю, что можно посимвольно решить вопрос, но может есть более красивое решение?
Вот взяли getline, скажем, пока не получили failbit, а дальше что? getline же не удаляет данные из буфера/stream?
Как потом эти данные выбросить и сдвинуть остаток в начало буфера, чтобы продолжить запись и не раздувать буфер?
  • Вопрос задан
  • 728 просмотров
Решения вопроса 1
myjcom
@myjcom Куратор тега C++
string msg = "Съешь ещё этих мягких французских булок";
  ostringstream os;
  os << "Съешь ещё этих мягких французских булок\n"
     << "Съешь ещё этих мягких французских булок\n"
     << "Съешь ещё этих м"
     << "ягких французских булок\n"
     << "Съешь ещё этих мягких французских булок\n";

  istringstream is(os.str());

  string line;
 
  while(is)
  {
    getline(is, line);
    if(is.fail())
    {
      os.str("");
      os << line;
      break;
    }
    cout << "line: " << line << "\n";
  }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы