gpt4 book ai didi

c - qsort记录(char数组)按降序排列

转载 作者:行者123 更新时间:2023-11-30 17:43:22 25 4
gpt4 key购买 nike

我正在尝试使用 qsort 打印动态内存记录并按降序排序。我正在使用命令行来确定应如何对记录进行排序。

打印记录的代码:

void print_records_by_name(record_list *list, int argc, const char *argv[])
{
size_t i;

if (argc == 2) {
if (strcmp(argv[1], "+n") == 0) {
qsort(list->data, list->nused, sizeof(record), sort_name_asc);
} else if (strcmp(argv[1], "-n") == 0) {
qsort(list->data, list->nused, sizeof(record), sort_name_des);
}
}

for (i = 0; i < list->nused; i++) {
fprintf(stdout, "%s %s %d\n", list->data[i].name.last, list->data[i].name.first, list->data[i].score);
}
}

我有用于升序排序的代码:

int sort_name_asc(const void *p, const void *q)
{
const record *pp = p;
const record *qq = q;
int n1, n2;

n1 = strcmp(pp->name.first, qq->name.first);
n2 = strcmp(pp->name.last, qq->name.last);

if (n2 == 0) {
return n1;
}

return n2;
}

这是我的降序排列:

int sort_name_des(const void *p, const void *q)
{
const record *pp = p;
const record *qq = q;
int n1, n2;

n1 = strcmp(qq->name.first, pp->name.first); /*just switched the pp and qq*/
n2 = strcmp(qq->name.last, pp->name.last); /*just switched pp and qq*/

if (n2 != 0) {
return n1;
}

return n2;
}

我编译了它,但它不起作用,有什么想法如何做吗?

谢谢

最佳答案

由于您在第二个函数中交换了指针,因此需要保持相同的逻辑。

if (n2 == 0) {
return n1;
}

或者简单地说:

int sort_name_des(const void *p, const void *q)
{
return -sort_name_asc(p, q);
}

关于c - qsort记录(char数组)按降序排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20251542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com