假设我有这样的结构:
typedef struct MyStruct{
char *string1;
int number1, number2, number3;
char string2[11], string3[9];
char *string4;
char *string5;
}MyStruct;
程序提示用户选择应该按哪个字段对数据进行排序。我无法想出一种有效排序数组的方法。我真的需要为每个字段编写单独的排序函数吗?一定有其他方法,因为编写 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;
}
这是比较器的一个不错的大纲。这个在 string1
上排序然后通过 number1
.您可以编写在不同字段上排序的变体,或者设计一个方案,按照您选择的顺序应用各种可能的测试。但基本大纲效果很好,适合传递给 qsort()
无需任何强制转换。
关于c - 在 C 中对结构数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16933487/