gpt4 book ai didi

c - 结构数组的排序成员

转载 作者:太空狗 更新时间:2023-10-29 16:37:53 25 4
gpt4 key购买 nike

给定一个结构数组(在 C 中),我试图按性别分组并按数字顺序按子顺序打印结果。例如:

struct employee{
char gender[13]
char name[13];
int id;
};

假设我这样定义结构数组:

struct employee info[2]={{"male","Matt",1234},{"female","Jessica",2345},{"male","Josh",1235}};

我怎样才能像这样打印结果

1234 Matt
1235 Josh


2345 Jessica

最佳答案

您需要实现一个排序函数,根据需要比较结构

int compare(const void *s1, const void *s2)
{
struct employee *e1 = (struct employee *)s1;
struct employee *e2 = (struct employee *)s2;
int gendercompare = strcmp(e1->gender, e2->gender);
if (gendercompare == 0) /* same gender so sort by id */
return e1->id - e2->id;
else
return -gendercompare; /* the minus puts "male" first as in the question */
}

然后使用标准库中的 qsort。

qsort(data, count, sizeof(struct employee), compare);

在比较函数中,您可能想要检查 id 是否相等,然后您可以根据需要按名称排序(也可以使用 strcmp())。

编辑:刚刚编译并修复了它。这是一个小测试程序

    #include <stdio.h>
#include <stdlib.h>

struct employee{
char gender[13];
char name[13];
int id;
};

int compare(const void *s1, const void *s2)
{
struct employee *e1 = (struct employee *)s1;
struct employee *e2 = (struct employee *)s2;
int gendercompare = strcmp(e1->gender, e2->gender);
if (gendercompare == 0) /* same gender so sort by id */
return e1->id - e2->id;
else
return -gendercompare;
}

main()
{
int i;
struct employee info[]={{"male","Matt",1234},{"female","Jessica",2345},{"male","Josh",1235}};

for (i = 0; i < 3; ++i)
printf("%d\t%s\t%s\n", info[i].id, info[i].gender, info[i].name);

qsort(info, 3, sizeof(struct employee), compare);

for (i = 0; i < 3; ++i)
printf("%d\t%s\t%s\n", info[i].id, info[i].gender, info[i].name);
}

输出:

$ ./a.exe
1234 male Matt
2345 female Jessica
1235 male Josh
1234 male Matt
1235 male Josh
2345 female Jessica

关于c - 结构数组的排序成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13372688/

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