gpt4 book ai didi

c - 如何使用指针对结构数组进行排序?

转载 作者:行者123 更新时间:2023-11-30 19:03:32 25 4
gpt4 key购买 nike

编写一个程序,将 id、名称和地址输入到结构体数组中,并使用指针根据名称升序对它们进行排序?

我尝试在这个论坛中搜索很多问题,但没有一个能完全帮助我。这是我的代码:

 #include<stdio.h>
struct student
{
char name[20], add[30];
int id;
};
int main()
{
struct student s[100];
struct student *sptr;
int i, j, temp, n;
char tempc[30];
sptr=&s;
printf("How many students do we have to register?");
scanf("%d",&n);
printf("Enter the id, name and address of the students and hit enter.");

for (i=0; i<n; i++)
{
scanf("%d%s%s",&sptr->id,&sptr->name,&sptr->add);
sptr++;
}
sptr=&s;
for(i=0; i<n; i++)
{
for(j=i+1;j<n;j++)
{
if(strcmp(s[i].name,s[j].name)>0)
{
strcpy(tempc,(sptr+i)->name);
strcpy(sptr->name,(sptr+j)->name);
strcpy((sptr+j)->name,tempc);
strcpy(tempc,sptr->add);
strcpy(sptr->add,(sptr+j)->add);
strcpy((sptr+j)->add,tempc);
temp=(sptr+j)->id;
sptr->id=(sptr+j)->id;
(sptr+j)->id=temp;

}
}
}
printf("The sorted form is:");

for (i=0; i<n; i++)
{
printf("%d%s%s",sptr->id,sptr->name,sptr->add);
sptr++;
}



}

如果你明白我要去的地方,请帮助我。是的,我不想使用任何内存分配函数或 sizeof() 函数。

最佳答案

只需使用 qsort就像下面这样:

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

struct student *lhs = (struct student *)a;
struct student *rhs = (struct student *)b;

return strcmp( lhs->name, rhs->name) ;
}

// N = total number of students;

qsort (s, N, sizeof(struct student), compare_student);

关于c - 如何使用指针对结构数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53827017/

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