gpt4 book ai didi

C++ 字符串流 tellg()

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:43:59 30 4
gpt4 key购买 nike

我正在用 c++98 编写一个小解析器(是的,不能使用 11)。我正在使用 std::stringstream,我通过引用传递给不同的函数,让我们称它们为子解析器。为了知道要调用哪个子解析器,我需要知道字符串流中的下一个词。由于 stringstream 是一个 istream,它确实有一个 peek 函数,它返回下一个字符而不移动迭代器/指针/任何标记字符串流中当前位置的东西,但是因为我需要下一个词,我写了一个函数 peekWord(暂时忽略注释行):

std::string Parser::peekWord(std::stringstream& sstream){
std::string myString = "EOF";
if(!sstream.eof()){
unsigned pos = sstream.tellg();
sstream >> myString;
//sstream.tellg();
sstream.seekg(pos);
}
return myString;
}

这似乎工作得很好。在调试时我注意到,一旦我在指针/标记/事物移过最后一个单词(返回 -1)后调用 tellg(),seekg(xBeforeLastPosition) 不会继续工作,仍然将位置设置为 -1。

stringstream 末尾的 tellg() 调用是否设置了 failbit 或类似的东西?我本能地希望 void 函数 tellg() 没有副作用。

期待收到你们的来信:)

点数

最佳答案

tellg 是这样指定的:

Returns: After constructing a sentry object, if fail() != false, returns pos_type(-1) to indicate failure. Otherwise, returns rdbuf()->pubseekoff(0, cur, in).

(istream::sentry 对象用于检查输入是否可用。)

所以,是的,它将在 EOF 上设置 failbit。但是,您可以通过检查 eof() 并使用 clear() 返回正常处理来检测到这一点。

关于C++ 字符串流 tellg(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24277273/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com