C++ stringstream tellg()
C++ stringstream tellg()
我正在用c++98编写一个小解析器(是的,不能使用11)。我正在使用std::stringstream,我通过引用传递给不同的函数,让我们称它们为子解析器。为了知道要调用哪个子解析器,我需要知道字符串流中的下一个单词。由于stringstream是一个istream,它确实有一个peek函数,该函数返回下一个字符,而无需移动迭代器/指针/标记stringstream中当前位置的任何东西,但是由于我需要下一个单词,我编写了一个函数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;
}
似乎工作得很好。在调试时,我注意到,一旦我调用tellg()之后,指针/标记/东西已经移动到最后一个单词(返回-1),seekg(xBeforeLastPosition)
不再工作,仍然将位置设置为-1。
在stringstrea
m的末尾调用tellg()
是否设置了failbit或类似的东西?我本能地希望空函数tellg()
没有副作用。
期待你们的消息:)
pip
tellg
被指定为:
返回:构造一个哨兵对象后,如果
fail() != false
,返回pos_type(-1)
表示失败。否则,返回rdbuf()->pubseekoff(0, cur, in)
。
(istream::sentry
对象用于检查输入是否可用)
所以,是的,它会将failbit
设置为EOF。但是,您可以通过检查eof()
并使用clear()
返回到正常处理来检测此问题。
相关文章:
- 当我们进行一些操作时,应该使用什么'std::string'或'std::stringstream'?
- C ++中的StringStream有助于使用向量从字符串中提取逗号分隔的整数,而不是空格分隔的整数,为什么?
- 使用 "stringstream " 将字符串转换为整数
- std::stringstream 返回字符 *
- 为什么函数 tellg() 没有返回好的结果?
- std::stringstream::flush() 应该做什么吗?
- 静态 std::stringstream 的叮当整警告
- Stringstream编译错误仅发生在linux环境中
- "stringstream"复制构造它的字符串吗?
- 为什么"std::stringstream::stringstream(std::string&&)"不存在?
- 为什么 {fmt} 比 std::stringstream 慢?
- 查找二进制文件的大小,函数 tellg() 返回 -1
- C++命令末尾的 std::stringstream 空格
- 返回 std::stringstream - 编译失败
- C++ std::stringstream 运算符<< vs (构造函数)
- 流从STD :: Stringstream带有空间的流
- 使用C STL StringStream记录具有实时性能要求
- iStream 未完全恢复已放入 Stringstream 的内容
- 当 std::stringstream 由 ( "some content" , std::ios::in|std::ios::ate) 构造时,tellg() 的预期行为是什么?
- C++ stringstream tellg()