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

C++ 使用fstream查看以空格分隔的文件中的下一项(而不仅仅是一个字符)的方法,c++,C++,在尝试实现一个程序来处理文件中一系列空格分隔的值时,我遇到了一个问题,即我无法查看>>运算符返回的输出,而将其保留在ifstream中作为下一个返回的内容 peek运算符存在,但它只读取一个字符,并且我的值是不确定位数的数字。因此,这并不能解决我的特殊问题。不过>>操作符更灵活,允许检索下一个“项”,但不提供任何保持文件流不变的peek功能 我确实找到了另一种方法来解决我的特殊问题,但如果有人能告诉我是否有一种方法可以模拟偷看fstream内容,我将不胜感激。双向流似乎很难使用,我的印象是它可能

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

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

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

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

例如,文件1可能包含23 45 67 823

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


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

处理数据的最简单方法是先将数据加载到内存中,然后执行所有处理。根据您的示例,2-5位数的20000个数字似乎不是内存杀手,我会我会努力的

如果您负担不起内存消耗,可以自行管理文件偏移量。如果您希望以任意方式读取文件(快进+正常读取),则应通过seek*()函数处理文件偏移量

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


如果您绝对需要最佳算法(性能)来查找下一个“\n”或下一个数字,那么您可能希望在执行查找时“最小化您的最大遗憾”。请看:

简短回答:没有。如果不编写大量代码,基本上从零开始实现此功能,就不会有。