【发布时间】:2018-08-29 13:50:51
【问题描述】:
我在 C 中有一个字符串数组。这些字符串存储需要卸载的文件系统的路径。
For example...
mountlist[0] = "/proc"
mountlist[1] = "/dev"
mountlist[2] = "/dev/shm"
and so on...
我需要在它们被挂载的文件系统之前卸载嵌套文件系统(因此/dev/shm 需要在/dev 之前卸载)。我在想最简单的方法是按长度对字符串进行排序,首先是最长的。我将数组中的字符串数存储在整数 i 中。
使用到目前为止我能够提出的代码,假设strnum 是我需要访问的字符串的整数,可以使用mountlist[strnum] 访问字符串,并且相应的长度存储在length[strnum].
总之,如何按最大到最小长度对数组中的字符串进行排序?我不需要实际对字符串进行排序,我只需要以正确的顺序访问它们。我不知道如何编写它,但我正在考虑创建一个 int 数组的代码,其中每个字符串数组的数量以正确的顺序排列(上面的示例是 {2,0,1}),所以如果该数组被命名为sort 然后mountlist[sort[0]] 将是最长的字符串。有了这样一个数组,对应的for 循环将是:
for (int q = 0; q < i; q++) {
umount(mountlist[sort[q]]);
}
【问题讨论】:
-
你知道
qsort()吗? -
@Fureeish 不,我会查一下。
-
如果订单是基于长度的,它可能会失败。示例:如果您有
"/dev/shm"和"/somenonnested",则后者将在"/dev/shm"之前卸载,因为它的长度更长... -
"/path"在字典上总是小于"/path/contained",其中/path是一个目录,contained是该目录中的某个内容。所以没有必要按字符串长度排序 - 以反向字典顺序排序就足够了