将字符串按字母顺序存储在二进制文件中

问题描述 投票:1回答:1

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

例如words.bin包含:alphacardelta

和pos.bin包含:0 5 8

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

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

任何帮助表示赞赏。

c sorting binaryfiles binary-search
1个回答
2
投票

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

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

这里有两种方法。

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

或者,您也可以

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

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

© www.soinside.com 2019 - 2024. All rights reserved.