gpt4 book ai didi

使用结构体的两个字段来比较 qsort 函数?

转载 作者:行者123 更新时间:2023-11-30 21:21:37 27 4
gpt4 key购买 nike

假设我们有一个结构:

     struct product 
{
char name[30];
float price;
};

我想首先使用 qsort 按价格对其进行排序,如果价格相等,则按名称对其进行排序。我是如何编写比较函数的:

    int compare(const void *a, const void *b )
{
int comp = a.price - b.price;

if (comp < 0 )
return 1
if (comp > 0 )
return 0;


comp = strcmp(a.name, b.name);

if ( comp < 0 )
return 1;
else
if ( comp > 0 )
return 0;

}

由于我只使用了 qsort 的常用比较函数,所以我不知道如何解决这个问题。根据给出的错误,我认为我错误地访问了字段,所以您能否指出我编写比较函数时的错误?

最佳答案

您编写的代码有几个语法错误,而且您的比较函数也没有达到您想要的效果。引用 qsort 的联机帮助页:

The comparison function must return an integer less than, equal to, or greater than zero if the first argument is considered to be respec‐ tively less than, equal to, or greater than the second. If two mem‐ bers compare as equal, their order in the sorted array is undefined.

考虑以下代码:

#include <stdlib.h>
#include <string.h>

struct product {
char name[30];
float price;
};

int compare(const void *a, const void *b) {

const struct product *x = a; // void* can be assigned to any other pointer type
const struct product *y = b;

int comp = x->price - y->price;

if (comp < 0)
return -1;

if (comp > 0)
return 1;

comp = strcmp(x->name, y->name);

return comp;
}

如果您想反转排序顺序,请在适当的位置对 comp 取反。

正如其他人所提到的,这是 C 代码,而不是惯用的 C++。

关于使用结构体的两个字段来比较 qsort 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23732011/

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