将字符串存储在二进制文件中,同时保持它们按字母顺序排序

时间:2019-11-19 11:00:18

标签: c sorting binaryfiles binary-search

因此,假设我有一个C程序将字符串存储到二进制文件中。然后在另一个二进制文件中,保存每个字符串的第一个字节的位置。

例如words.bin包含:alphacardelta

和pos.bin包含:0 5 8

我想插入“ beta”,并将其插入alpha和car之间。虽然我已经找到了如何在alpha后面插入它,但是我无法找到一种自动的方法来将其插入正确的位置,并且不会导致其他单词在可能较长的列表中“消失”。有帮助吗?

我认为可以工作的另一种方法(可能更好)是在delta之后插入beta,然后重新进行排序,但是我对此的尝试也失败了。

任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

  

我想插入“ beta”,并使它介于alpha和car之间。

要在文件中执行此操作,您需要再次将数据写入文件中。

这里有两种方法。

  1. 将文件中的所有数据读取到内存(RAM)中。您可以使用数组或结构。
  2. 将正确位置的其他数据添加到内存中。
  3. 再次写入整个文件。作为一种优化,您可以从更改后的位置开始写到最后。

或者,您可以

  1. 将文件中的所有数据读取到内存(RAM)中。在这里,您可以读取整个数据或读取适当的块以减少内存使用。
  2. 使用其他数据创建新文件
  3. 写入此新文件。
  4. 最后,您可以删除旧文件并重命名新文件。

这是一个非常低效的操作,如果您尝试找到一种仅将新数据添加到文件末尾(追加)的方法,那就更好了。您可以在开头保留某种数据索引,以了解字符串的位置以及是否删除字符串。