我想知道是否有一种方法可以向比较器传递额外的参数,然后在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);
}
有没有办法让我像这样做:
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);
}
我问的原因是我的排序程序需要使用开关,如果我有两个不同的开关(+a,-a)表示升序和降序,那么我必须编写两个不同的比较函数。如果我添加更多,则会变得更加复杂。有没有一种改进此程序设计的方法?
编辑:不允许全局和外部变量。
void *
的.name
成员。 - Chris Lutzstrcmp()
,甚至是多余的if
。你提前知道你想要升序还是降序:提供适当的比较器。 - user207421