小编Jug*_*nte的帖子

将额外参数传递给qsort的比较器

我只是想知道是否有办法让我将一个额外的参数传递给我的比较器,然后在我的qsort函数中使用它?

例如,我有这两个比较器(一个按升序排列,另一个按降序排列)

qsort(entries, 3, sizeof(struct entry), compare_desc);

int compare_asc(const void *elem1, const void *elem2)
{
     return strcmp(elem1.name.last, elem2.name.last);
}


int compare_desc(const void *elem1, const void *elem2)
{
     return strcmp(elem2.name.last, elem1.name.last);
}
Run Code Online (Sandbox Code Playgroud)

有没有办法,所以我可以做这样的事情:

int compare(const void *elem1, const void *elem2, const char *order)
{
     if (strcmp(order, "asc") == 0)
         return strcmp(elem1.name.last, elem2.name.last);
     else if (strcmp(order, "desc") == 0)
         return strcmp(elem2.name.last, elem1.name.last);
}
Run Code Online (Sandbox Code Playgroud)

我问的原因是我的排序程序必须接受开关,如果我有2个不同的开关(+ a,-a)分别用于升序和降序,那么我必须制作2个不同的比较器功能.如果我添加更多,它会变得更复杂.有没有办法改进这个程序的设计?

编辑:不允许全局和外部变量.

c

14
推荐指数
4
解决办法
5685
查看次数

标签 统计

c ×1