在不移动文件位置的情况下从文件中读取下一个字符串的快速方法

Quick way to read the next string from a file without moving the position of the file

提问人:JDoe4444 提问时间:4/20/2018 更新时间:4/20/2018 访问量:935

问:

我想知道在不增加光标在文件中的位置的情况下读取文件中下一个字符串的最佳方法是什么(以检查它是否与字符串匹配)。所以基本上我想在不读取下一个字符串的情况下阅读下一个字符串。

C++ IOstream IFStage

评论

3赞 UKMonkey 4/20/2018
阅读它然后倒带光标怎么样
0赞 JDoe4444 4/20/2018
@UKMonkey这是我的解决方案,但我想知道是否有更快的方法来解决这个问题。如果没有,这是我会坚持的解决方案。
0赞 Yksisarvinen 4/20/2018
你可以用它来获取下一个字符,但我不允许获取多个字符。peek()
0赞 Jabberwocky 4/20/2018
是什么让您认为倒带光标不快?C++ 库经过高度优化。

答:

2赞 Andreas H. 4/20/2018 #1

只要使用相同的 ifstream 对象,就无法在不更改光标的情况下读取下一个字符串,但可以保存并恢复位置:

auto p = stream.tellg();
// do what ever read you like
stream.seekg(p, std::ios_base::beg);

如果读取失败,则可能需要在调用 seekg() 之前清除错误标志。

评论

0赞 JDoe4444 4/20/2018
谢谢,这是我使用的解决方案,但我很好奇是否有其他方法可以解决这个问题。再次感谢你。
0赞 Andreas H. 4/20/2018
您可以使用 peek() 从流中获取下一项,而无需更改光标。如果这返回“错误”字符,则无需告诉/阅读/查找。也许这会带来更好的性能。