HDU 5427 A problem of sorting

题目链接: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 T100 which denotes the number of test cases.

For each test case, there is an positive integer n(1n100) 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

字符串处理,输入一串字符,包含了名字和出生年份,输出从年轻到老的人的名字的排序序列。主要要解决的问题就是输入,使用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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值