用putback从cin中窥视多个字符

peek multiple chars from cin with putback

本文关键字:字符 窥视 putback cin      更新时间:2023-10-16

我需要尝试从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个字符的"宽"放回缓冲区才是安全的。您将不得不添加额外的抽象层,以提供更多的放回空间。

或者,如果你的流是可搜索的,你可以在开始尝试解析之前记住这个位置,然后寻找回记住的位置。

putback调用sputback,只有在有返回位置的情况下才能工作。没有什么能保证这种职位的数量是无限的。