How to eliminate duplicates in a struct, and use qsort to sort them in C
我试图在我的结构中找到来自特定国家的人,消除重复项,并用qsort将剩余的按团队和名称排序。
我的结构如下:
1 2 3 4 5 6 7 8 | struct rider_info{ char race_name[30]; char name[50]; char lastname[30]; int age; char team[4]; char country[4]; }; |
所以我正在读取的文件中的一些人出现在多个种族中。因此,我需要消除重复,但我不确定是如何做到的。之后,我需要将这些人按团队和名称进行排序。我已经尝试过了,但它只是打印了我需要的那个特定国家的所有人。这是目前的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | void print_belgian_riders(FILE *fp, int j, rider_info person[j]) { char str[4] ="BEL"; //i need to print Belgian riders char line[128]; int lines = count_lines(); for (j = 0; j < lines; ++j) { if (strcmp(person[j].country, str) == 0) { qsort(person, 20, sizeof(person), struct_comp_team); printf("%s %s %d %s %s", person[j].name, person[j].lastname, person[j].age, person[j].team, person[j].country); printf(" "); } } } |
号
下面是我的比较功能,用于按团队和名称排序:
1 2 3 4 5 6 7 8 9 10 11 12 | int struct_comp_team(const void *ep1, const void *ep2) { int TeamSort = strcmp((((rider_info*)ep1)->team), ((rider_info*)ep2)->team); int lastNameSort = strcmp(((rider_info*)ep1)->lastname, ((rider_info*)ep2)->lastname); if (TeamSort != 0) { return (TeamSort); } else if (lastNameSort != 0) { return lastNameSort; } } |
我的比较函数不起作用,我不知道它出了什么问题,有人知道怎么做吗?还有人知道我应该如何消除重复吗?
根据
1 2 3 4 5 6 7 8 9 10 11 12 13 | int struct_comp_team(const void *ep1, const void *ep2) { int TeamSort = strcmp((((rider_info*)ep1)->team), ((rider_info*)ep2)->team); int lastNameSort = strcmp(((rider_info*)ep1)->lastname, ((rider_info*)ep2)->lastname); if (TeamSort != 0) { return (TeamSort); } else if (lastNameSort != 0) { return lastNameSort; } return 0;//duplicate value } |