c - 在 C 中对二进制文件中的记录进行排序

标签 c arrays sorting file-io

我正在开发一个程序,该程序使用 read()、write()、open() 和 close() 来处理文件。我们得到一个要排序的二进制记录文件。

我的困惑是从阅读步骤开始的。根据我的理解, read 将文件内容放入字符数组中。因此,如果我没有完全关闭,这意味着每个索引都包含一个字节的信息。每条记录都用空格分隔。我将按每个包含的前四个字节对它们进行排序。

我知道记录的格式,但数据的范围是可变的。幸运的是,记录之间只有空格,单个记录内没有空格。该结构是一个整数作为文件头,表示有多少条记录。每个 key 是 4 个字节,后面跟着 4 个字节表示有多少数据,后面跟着的数据全部不带空格。数据大小不包含空间。

C 库中的排序例程是否可以将这些数据作为字符而不是整数处理?另外,我不知道从哪里开始分离和重新排列记录。我是否必须将每个提取到记录结构数组中并从那里排序?

我是 C 语言新手,在网上找不到太多使用这些特定函数的信息。这是一份家庭作业,但截止日期已过;我只是想加快我的理解。

最佳答案

如果文件是二进制的,正如您所写的那样 - 那么记录不会被任何东西分隔,您只需要知道每个记录的大小(所有记录可能具有相同的大小)。

为了排序,可以使用标准库函数,例如 qsort 。该函数使用您提供的回调,因此它可以处理任何类型的数据。 qsort返回后,您将重新排列数据。

Would I have to extract each into an array of record structs and sort from there?

是的,对于少量记录(如学生作业),这是一个不错的选择。

关于c - 在 C 中对二进制文件中的记录进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39682323/

相关文章:

java - 从 .csv 文件输入行中提取字段

Python:如何按子字符串相关性对字符串列表进行排序?

c - 使用sscanf从c中的字符串中提取

CS50 Pset 2.我的crack.c代码编译并运行,但不打印任何内容

c - 一组点的最大周长边界矩形

c - 如何在 C 中的用户定义后在程序中 append 文件名

c++ - 循环与索引

php - 取消设置引用的数组项

c - 在C中合并多个排序数组

javascript - 字母数字和数字字符串排序未按预期工作