c++ - 使用 fstream 查看空格分隔文件中的下一项(不仅仅是一个字符)的方法

标签 c++

在尝试实现一个程序来处理文件中的一系列空格分隔值时,我遇到了一个问题,即我无法查看 >> 运算符返回的输出,同时将其留在 ifstream 中接下来的事情又回来了。

存在 peek 运算符,但它只能读取一个字符,而且我的值是不确定位数的数字。因此,这不是我的特定问题的解决方案。然而,>> 运算符更灵活,允许检索下一个“项目”,但不提供任何使文件流保持不变的查看功能。

我确实找到了另一种方法来解决我的特定问题,但如果有人能告诉我是否有一种方法可以模拟查看 fstream 内容,我将不胜感激。双向流似乎很难使用,我的印象是它可能需要重置缓冲区,但我认为这可能很耗时(所以我拒绝了这种方法,因为我知道这不是我知道如何轻松实现的东西而且我不知道处理长数据集(> 20,000 个空格分隔的条目)的效率如何。

这个问题涉及在一长串文件内容中查找连续的重复项,以便我可以相应地调整我对条目的处理。在我的例子中,问题涉及数字,但它可以很容易地应用于以空格分隔的单词列表。

例如file1可能包含23 45 67 67 823 ...

换句话说,在我处理前 67 个之前,我想知道我连续有多少个,这样我就可以相应地进行调整。在我的例子中,数字是按升序排列的。 >> 运算符可以检索下一个值,但它不再位于从该文件读取的输入文件流 (ifstream) 中。

我有一个解决方案,但想扩展我的知识,并可能会决定该解决方案是否足够优雅以修改我的解决方案。谢谢。

最佳答案

处理数据最简单的方法是先将它们加载到内存中,然后再执行所有处理。根据您的示例,20.000 个 2-5 位数的数字似乎不是内存 killer ,我会这样做。

如果您无法承受内存消耗,您可以求助于自己管理文件偏移量。如果您想以任意方式读取文件(快进 + 正常读取),您应该求助于通过 seek*() 函数操纵文件偏移量。

基本上,您保存当前文件偏移量,执行所需的所有读取,然后恢复偏移量。

如果您绝对需要最好的算法(性能)来找到您的下一个“\n”或下一个数字,您可能希望在执行搜索时“最小化您的最大遗憾”。看看:http://datagenetics.com/blog/july22012/index.html

关于c++ - 使用 fstream 查看空格分隔文件中的下一项(不仅仅是一个字符)的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44916113/

相关文章:

c++ - 提升 C++ 与 Python 的能力

c++ - fatal error : google/protobuf/port_def. inc:没有这样的文件或目录

c++ - Qt 使用 isAutoRepeat() 处理 QPushButton Autorepeat() 行为

c++ - 为函数设计接口(interface),强制用户(客户端)提供 >= 所需大小的内存区域。怎么样,是好是坏?

c++ - 编译器允许 'char * k= false' ?为什么?

c++ - 我如何 typedef 基类的成员模板?

c++ - 我可以在头文件中初始化一个本身是类的数据成员吗?

c++ - gsoap c 文件读取

C++ Socket select() before accept() 多次看到相同的连接

c++ - XML Schema 到 C++ 类