A problem of sorting
Problem Description
There are many people's name and birth in a list.Your task is to print the name from young to old.(There is no pair of two has the same age.)
Input
First line contains a single integer
T≤100
which denotes the number of test cases.
For each test case, there is an positive integer n(1≤n≤100) which denotes the number of people,and next n lines,each line has a name and a birth's year(1900-2015) separated by one space.
The length of name is positive and not larger than 100 .Notice name only contain letter(s),digit(s) and space(s).
For each test case, there is an positive integer n(1≤n≤100) which denotes the number of people,and next n lines,each line has a name and a birth's year(1900-2015) separated by one space.
The length of name is positive and not larger than 100 .Notice name only contain letter(s),digit(s) and space(s).
Output
For each case, output
n
lines.
Sample Input
2 1 FancyCoder 1996 2 FancyCoder 1996 xyz111 1997
Sample Output
FancyCoder xyz111 FancyCoder 题意:给定一些人的姓名和出生日期,让我们将他们的年龄从小到大排序(注意坑点:姓名中可能会出现空格) 附上代码: #include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <iomanip> #include <queue> using namespace std; struct node{ char name[105]; int age; }num[105]; bool cmp(node a,node b) { return a.age>b.age; } int main() { int t,n,i,j,len; char s[105]; cin>>t; while(t--) { cin>>n; getchar(); for(i=0;i<n;i++) { gets(s); len=strlen(s); num[i].age=(s[len-1]-'0')+(s[len-2]-'0')*10+(s[len-3]-'0')*100+(s[len-4]-'0')*1000; for(j=0;j<len-5;j++) { num[i].name[j]=s[j]; } num[i].name[j]='\0';//将姓名全部复制过来后,直接在它尾部标记结束符号,如果不标记就会错 } sort(num,num+n,cmp); for(i=0;i<n;i++) { cout<<num[i].name<<endl; } } return 0; }