#结构体排序

本文探讨了如何使用结构体进行排序,以加深对结构体的理解。通过引用HDU2093考试排名问题,解释了如何定义多组结构体,并提供了输入输出的基本操作。文章重点介绍了strcmp函数在字符串比较中的作用,以及按照字典顺序比较字符串的原理。此外,作者还分享了在题解中关于将char转换为int以利用ASCII码进行比较的技巧,并借此机会澄清了continue和break在循环控制中的区别,强调了continue的实际作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主要参考HDU2093-考试排名。通过对于结构体的排序来更深层次的理解结构体
题目网站:http://acm.hdu.edu.cn/showproblem.php?pid=2093
题解网站:https://blog.youkuaiyun.com/wlxsq/article/details/48187167

定义一个多组的结构体,我们可以这样来:

struct node{
 char name[20];
 int cnt;
 int score;
}stu[N];

然后如果你想输入第一个stu的name的话,
可以这样:cin>>stu[10].name
具体的输入输出我就不多讲了,这算是结构体的基础知识了
这里我主要想讲讲结构体排序

bool cmp(node x,node y)
{
 if(x.cnt!=y.cnt) return x.cnt>y.cnt;//按做出的题目数从大到小排
 else if(x.score!=y.score) return x.score<y.score;//按得分从小到大排
 else return strcmp(x.name,y.name)<0;//按姓名的字典序从小到大排
}
最后我要排序的时候:
sort(stu,stu+t,cmp)//这个是数组指针的意思来排序,可参照之前的博客

另外关于strcmp(str1,str2)函数:
若str1=str2,则返回零;
若str1<str2, 则返回负数;
若str1>str2, 则返回正数;
主要是按照字典顺序来比较的(即:两个字符串从左向右按ASCII码比较,直到出现不同的字符,或遇到‘\0’为止)

在题解中我比较欣赏的点:
把char的数字转化为int型,通过ascii码还是可以的
还有continue的意思其实是,如果碰到了con的条件,则进行循环的下一步,这一步之后的代码直接跳过,而break是跳出循环的意思。这里我加深了对continue的理解,以前一直以为是个可有可无的代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值