【发布时间】:2020-07-27 11:20:57
【问题描述】:
我正在扫描来自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();
}
【问题讨论】:
-
使用
getline代替 do-while 循环有什么问题吗? -
有道理。这将至少清理那部分。
标签: c++ istream istringstream istream-iterator