2012-12-04 160 views
0

我们已经得到一个文本文件,其中包含按排序顺序排列的1000万个整数。需要在C中编写一个程序来将这些数字转换并写入一个单独的文件。要使用哪种数据结构以及如何在内存中复制这样庞大的数据?而对于倒序,我应该使用fseek还是存储在一些数据结构中,然后反转? 请帮忙。读取文件,将其翻转并将其写入另一个文件

+0

每行是一个唯一的整数,还是每行有多个整数(如果是这样,它们是如何分开的) – onaclov2000

+0

单独反转每个整数或文件数据意味着最后一个整数,等等? – Omkant

+0

你确定只想通过C程序来完成吗?像perl这样的脚本语言或者使用基本工具会更合适(也更简单) –

回答

2

如果您想在基本桌面系统上运行此功能,除了(动态)阵列以外不需要特殊的数据结构。

只是为例如最初有1,000个数字,startl加载,并在分配大小用完时加倍。这将增加该数组像这样:

1,000 -> 2,000 -> 4,000 -> 8,000 -> 16,000 -> 32,000 -> 

64000 - > 128000 - > 256,000 - > 512,000 - > 1,024,000

所以它会做10个呼叫realloc()这确实应该罚款。

一旦您在数组中有数字,只需向后循环并将每个数字打印到输出文件。

当然,您可以使用这样的事实,即您知道有一百万个数字对您有利,并且适当地设置了初始大小。

1

我建议使用固定大小的缓冲区(文件系统的块大小),并从文件末尾读取块,然后将其写入新文件,向后读取缓冲区。

这样你就不必realloc任何缓冲区(这是一个代价高昂的操作,虽然它可能适用于兆字节大小的文件)。

相关问题