首页 > 解决方案 > 从 std::istream 中提取完整的当前行

问题描述

我正在扫描来自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();
}

标签: c++istreamistringstreamistream-iterator

解决方案


使用函数std::getline(std::cin, std::string)


推荐阅读