题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5427
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)
The length of name is positive and not larger than 100
Output
For each case, output
n
lines.
Sample Input
2 1 FancyCoder 1996 2 FancyCoder 1996 xyz111 1997
Sample Output
FancyCoder xyz111 FancyCoder
字符串处理,输入一串字符,包含了名字和出生年份,输出从年轻到老的人的名字的排序序列。主要要解决的问题就是输入,使用getline函数读取单个字符直到读取完一行,取后四位作为年份进行排序即可。
代码如下:
#include<iostream>
#include<algorithm>
using namespace std;
typedef struct{
char name[100];
int year;
}people;
people peo[100];
char str[110];
bool cmp(people a, people b){
return a.year>b.year;
}
int main()
{
// freopen("E:\\in.txt","r",stdin);
int t;
cin>>t;
while(t--){
int n,i=0,t=0;
cin>>n;
getchar();
while(n--){
cin.getline(str,110);
int len=strlen(str);
peo[t].year=str[len-1]-'0'+(str[len-2]-'0')*10+(str[len-3]-'0')*100+(str[len-4]-'0')*1000;
// cout<<peo[t].year<<endl;
len-=5;
str[len]='\0';
strcpy(peo[t].name,str);
// cout<<peo[t].name<<endl;
t++;
}
sort(peo,peo+t,cmp);
for(i=0;i<t;i++)
cout<<peo[i].name<<endl;
}
return 0;
}