我需要尝试从 std::istream
(可能是 std::cin
)中查看多个字符,因此我编写了一个简单的循环来调用 get()
多次,然后 putback()
多次:
std::vector<char> peek_many(std::istream& is, int N) {
std::vector<char> data;
data.reserve(N);
for (int i = 0; i < N; ++i) {
data.push_back(is.get());
}
for (int i = 0; i < N; ++i) {
is.putback(data[N-i-1]);
}
return data;
}
这是否保证适用于所有 istream
(无论我正在读取文件、cin
、istringstream
等)?如果没有,为什么不呢?
最佳答案
仅假设 1 个字符“宽”的回放缓冲区是安全的。您将必须添加额外的抽象层以提供更多的放回空间。
或者,如果您的流是可搜索的,您可以在开始尝试性解析之前记住该位置,然后返回到记住的位置。
关于c++ - 通过 putback 从 cin 中查看多个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37037832/