c++ - 从 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();
}
解决方案
使用函数std::getline(std::cin, std::string)
推荐阅读
- c# - 在 C# 类中使用 AuthenticationStateProvider 而不是 .razor 页面
- c# - WPF 绑定用空格替换零
- python - 如果一列的元素不是数字,则删除 pandas 数据框行
- excel - VBA:将特定单元格从 Folderpicker 识别的文件复制并粘贴到 Filepicker 识别的目标文件
- apache-kafka - TCP Sender 是否可以向 Apache kafka 中的主题发送消息?
- amazon-web-services - 在 AWS Sagemaker 培训期间从检查点重新加载
- javascript - 日期选择器的最小开始日期
- angular - 错误 TS2339:“从不”类型上不存在属性“编辑名称”
- kubernetes - 如何使用大使 edgestack 配置 cert-manager?
- entity-framework - 您如何在具有父/子关系的 EF 中使用 group by 和 having 子句?