【知识点】
按结构体的“字符数组成员”对结构体数组进行排序前,需要自定义排序函数。
其中,要用到 strcmp 函数。
C++ 中 strcmp(a,b) 函数的用法
● 若 len(a)>len(b),则返回1。
● 若 len(a)==len(b),则返回0。
● 若 len(a)<len(b),则返回-1。
C++ 中 strcmp(a,b) 函数的用法代码一:
#include <bits/stdc++.h>
using namespace std;
int main() {
char s1[]="abcdefg";
char s2[]="abcdefg";
char s3[]="abcde";
printf("%d\n",strcmp(s1,s2)); //0
printf("%d\n",strcmp(s1,s3)); //1
printf("%d\n",strcmp(s3,s1)); //-1
return 0;
}
C++ 中 strcmp(a,b) 函数的用法代码二:
#include <bits/stdc++.h>
using namespace std;
int main() {
const char* s1="abcdefg";
const char* s2="abcdefg";
const char* s3="abcde";
printf("%d\n",strcmp(s1,s2)); //0
printf("%d\n",strcmp(s1,s3)); //1
printf("%d\n",strcmp(s3,s1)); //-1
return 0;
}
【算法代码】
#include <bits/stdc++.h>
using namespace std;
const int maxn=1005;
struct Node {
char name[20];
float score;
};
int up(Node x,Node y) {
return strcmp(x.name,y.name)<0;
}
int down(Node x,Node y) {
return strcmp(x.name,y.name)>0;
}
int main() {
Node p[maxn];
int n;
cin>>n;
for(int i=0; i<n; i++) {
cin>>p[i].name>>p[i].score;
}
sort(p,p+n,up); //Sort by ascending field name
//sort(p,p+n,down);
cout<<endl;
for(int i=0; i<n; i++) {
cout<<p[i].name<<" "<<p[i].score<<endl;
}
return 0;
}
/*
in:
7
Tom 27.2
Mary 50.6
Jim 30.9
Bob 50.6
Wood 72.8
Alice 49.3
Kite 21.1
out:
Alice 49.3
Bob 50.6
Jim 30.9
Kite 21.1
Mary 50.6
Tom 27.2
Wood 72.8
*/
【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/120184972