我在C中有一个字符串数组。这些字符串存储需要卸载的文件系统的路径。
@Bean
public Step personLoadingStep() {
return steps.get("personLoadingStep")
.tasklet((contribution, chunkContext) -> {
System.out.println("personLoadingStep");
chunkContext.getStepContext().getStepExecution().setExitStatus(new ExitStatus("INVALID"));
return RepeatStatus.FINISHED;
})
.build();
}
我需要先将嵌套的文件系统挂载到挂载的文件系统上(因此For example...
mountlist[0] = "/proc"
mountlist[1] = "/dev"
mountlist[2] = "/dev/shm"
and so on...
需要先于/dev/shm
挂载)。我在想,最简单的方法是按长度对字符串进行排序,最长的优先。我将数组中的字符串数存储在整数/dev
中。
使用到目前为止我已经提出的代码,假设i
是我需要访问的字符串的整数,则可以使用strnum
及其对应的字符串访问这些字符串长度存储在mountlist[strnum]
中。
总而言之,如何按最大到最小长度对数组中的字符串排序?我不需要对字符串进行实际排序,只需要按正确的顺序访问它们即可。我不知道该怎么写,但是我在想代码创建一个int数组,并以正确的顺序排列每个字符串数组的编号(上面的示例为{2,0,1}),所以如果该数组的名称为length[strnum]
,则sort
将是最长的字符串。使用这样的数组,对应的mountlist[sort[0]]
循环将是:
for
答案 0 :(得分:3)
您可以仅将qsort
与自定义比较器一起使用:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int cmp(const void *first, const void *second) {
const char **firstCast = (const char ** )first;
const char **secondCast = (const char **) second;
return strcmp(*secondCast, *firstCast);
}
int main(void) {
const char *a[3];
a[0] = "longest";
a[1] = "short";
a[2] = "medium";
qsort(a, 3, sizeof(char *), cmp);
for (int i = 0 ; i < 3; i++) {
printf("%s\n", a[i]);
}
}
答案 1 :(得分:1)
如果您不希望依赖qsort之类的“外部”东西(您的环境中可能有或没有),则应该这样做:
for (int j = 0; j < i; ++j) sort[j] = j;
for (int j = 0; j < i - 1; ++j) {
int longest = j;
for (int k = j + 1; k < i; ++k) {
if (length[sort[k]] > length[sort[longest]]) longest = k;
}
int tmp = sort[longest];
sort[longest] = sort[j];
sort[j] = tmp;
}