主要参考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的理解,以前一直以为是个可有可无的代码。