假设我有这样的结构:
typedef struct MyStruct{
char *string1;
int number1, number2, number3;
char string2[11], string3[9];
char *string4;
char *string5;
}MyStruct;
Run Code Online (Sandbox Code Playgroud)
程序提示用户选择应该对数据进行排序的字段.我无法想到一种有效排序数组的方法.我真的需要为每个字段编写单独的排序函数吗?必须有其他一些方法,因为编写8个函数,其中2就足够了,看起来不合理.
qsort()从中查找<stdlib.h>.它需要一个比较器功能.您可以为不同的排序顺序编写单独的比较器函数,但仍然使用标准库qsort()来进行排序.
例如:
int ms_cmp_string1(const void *vp1, const void *vp2)
{
const MyStruct *ms1 = vp1;
const MyStruct *ms2 = vp2;
int cmp = strcmp(ms1->string1, ms1->string2);
if (cmp != 0)
return cmp;
else if (ms1->number1 < ms2->number1)
return -1;
else if (ms1->number1 > ms2->number1)
return +1;
//...other comparisons as required...
else
return 0;
}
Run Code Online (Sandbox Code Playgroud)
对于比较器来说,这是一个不错的大纲.这个按此排序string1然后按number1.您可以编写在不同字段上排序的变体,也可以设计一个按您选择的顺序应用各种可能测试的方案.但基本轮廓非常有效,适合传递给qsort()没有任何必要的演员.
| 归档时间: |
|
| 查看次数: |
2360 次 |
| 最近记录: |