c++ - 通过 putback 从 cin 中查看多个字符

标签 c++ istream peek

我需要尝试从 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(无论我正在读取文件、cinistringstream 等)?如果没有,为什么不呢?

最佳答案

仅假设 1 个字符“宽”的回放缓冲区是安全的。您将必须添加额外的抽象层以提供更多的放回空间。

或者,如果您的流是可搜索的,您可以在开始尝试性解析之前记住该位置,然后返回到记住的位置。

关于c++ - 通过 putback 从 cin 中查看多个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37037832/

相关文章:

c++ - boost::optional 与 boost::make_optional

c++ - recursive_directory_iterator 抛出异常

c++ - 虚方法和构造函数?

c++ - 为什么 cout 在重载运算符 << 的友元函数中不起作用,它是一个 istream 运算符

c++ - 使用 getline 从文本文件创建 2 个并行字符串数组

Java Stack peek 方法显示 0 而不是正确的数字

Azure ServiceBus PeekBatch 方法返回错误的记录数

android - Qt/C++/Android - 如何以编程方式安装 .APK 文件?

C++:使用 std::cin 的多个拷贝?

c++ - ifstream无限循环(它似乎永远找不到停止读取的标记)