Извлечение полной текущей строки из std :: istream - PullRequest
0 голосов
/ 14 апреля 2020

Я сканирую текст с std::istream. Сканирование уже идет, и я хотел бы извлечь строку, которая в данный момент читается (от начала до конца). Эта getCurrentLine() функция не должна изменять позицию std::istream.

Я написал этот фрагмент кода, который я нахожу довольно грязным. Есть лучший способ сделать это? (charStream_ это std::istream)

std::string Scanner::getCurrentLine() const {
  auto pos = charStream_.tellg();

  // rewind until beginning of the line or stream
  while (charStream_.peek() != '\n' && charStream_.tellg() != 0)
    charStream_.unget();

  // consume endline character
  if (charStream_.peek() == '\n')
    charStream_.get();

  std::stringstream lineStream;
  char c;
  do {
    c = static_cast<char>(charStream_.get());
    lineStream << c;
  } while (c != '\n' && c != EOF);

  charStream_.seekg(pos);

  return lineStream.str();
}

1 Ответ

0 голосов
/ 14 апреля 2020

используйте функцию std :: getline (std :: cin, std :: string)

...