C的新手,发现它令人困惑。我真正想知道的是,编写两个单独的代码并将它们一起使用。
这里有一些代码仅列出了当前目录的内容:
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
int
main (void)
{
DIR *dp;
struct dirent *ep;
dp = opendir ("./");
if (dp != NULL)
{
while (ep = readdir (dp))
puts (ep->d_name);
(void) closedir (dp);
}
else
perror ("Couldn't open the directory");
return 0;
}
输出未排序
下面是一些使用快速排序算法按元素长度对数组进行排序的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *array[] = { "XX", "YYY", "Z" };
#define N (sizeof(array) / sizeof(array[0]))
int
cmp(const void *a, const void *b)
{
size_t lena = strlen(*(const char **)a);
size_t lenb = strlen(*(const char **)b);
return lena < lenb ? -1 : lena > lenb;
}
int
main()
{
size_t i;
qsort(array, N, sizeof(array[0]), cmp);
for (i = 0; i < N; i++)
printf("%s\n", array[i]);
}
我确定有更好的方法来执行此操作,但是出于纯粹的学术原因,我想将第一个函数的输出(目录内容)用作最后一个函数的输入(按长度排序)。
答案 0 :(得分:0)
您可以将不同对象存储在数组中,然后将其传递给qsort。 应该修改功能cmp以比较dirent指针中的d_name元素。像这样
int cmp(const *a, const void *b)
{
size_t lena = strlen(((struct dirent *) a)->d_name);
size_t lenb = strlen(((struct dirent *) b)->d_name);
return lena < lenb ? -1 : lena > lenb;
}