二、排序问题2
2.1.4 编写cmp实现排序
strcmp(str1,str2)函数比较两个字符串,需添加<string.h>头文件
若str1==str2,则返回零;
若str1<str2,则返回负数;
若str1>str2,则返回正数。
#include <stdio.h> #include <algorithm> #include <string.h> using namespace std; struct S{ char name[100]; int age; int score; }stu[1000]; bool cmp(S a,S b) {//实现比较规则 if(a.score != b.score) return a.score < b.score;//分数低的在前面 int tmp = strcmp(a.name,b.name);//字符串比较函数 if(tmp != 0) return tmp < 0; // 若分数相同,则名字序小者在前 else return a.age < b.age; } int main() { int n; while (scanf("%d",&n) != EOF){ for(int i = 0;i < n;i ++){ scanf("%s%d%d",&stu[i].name,&stu[i].age,&stu[i].score); } sort(stu,stu + n,cmp); for(int i = 0;i < n;i ++){//输出排序结果 printf("%s %d %d\n",stu[i].name,stu[i].age,stu[i].score); } } return 0; }