我在C:
中实现了这个结构typedef struct student_type_ {
int number;
char name[20];
char lastname[20];
struct student_type_ *next_student;
} student_type;
现在我想按名称和姓氏对这些结构列表进行排序。因此,我想用不同的参数创建2个“比较”函数:一个函数获得2个指向2个名称,另一个函数获得2个姓氏。
这样的事情:
int compare ((*student_type)->name a, (*student_type)->name b){
return strcmp(*a, *b);
}
int compare ((*student_type)->lastname a, (*student_type)->lastname b){
return strcmp(*a, *b);
}
此代码不正确。你能帮我识别并解决问题吗?
谢谢!
答案 0 :(得分:3)
你可以尝试
int compare_by_name(student_type * a, student_type * b){
return strcmp(a->name, b->name);
}
int compare_by_lastname(student_type * a, student_type * b){
return strcmp(a->lastname, b->lastname);
}
如果您想将其与bsort()
结合使用,则可能需要使用void *
代替参数。
答案 1 :(得分:2)
问题是student_type->姓氏不是类型,也不是student_type-> name。试试char *
当你修复它时,你会遇到这样的问题:在C中,具有相同参数的函数不能有两个名称(C不支持重载),所以你必须编写两个比较,一个实现规则比较名称和另一个名称以实现姓氏的比较(如果出于任何原因,规则不同)。
答案 2 :(得分:0)
在C中定义两个具有相同名称的函数构成了罪。在你的情况下,你真正想要的可能是两件事之一。定义两个函数:
compare_by_first_name
compare_by_last_name
具有明显的功能,或者一个函数:compare(char * name1, char * name2)
然后被调用:
compare (student1->name, student2->name);
compare (student1->lastname, student2->lastname);