您的位置:首页 > 编程语言 > C语言/C++

C++泛型编程(通讯录编排)

2016-01-26 15:51 351 查看

泛型编程(通讯录编排)

Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByte

Total Submit:49 Accepted:14

Description

ACM集训队最近人气很旺,为了促进队员之间的交流,我们准备制作一个通讯录,每个队员的信息包括:
tojid 电话 籍贯 出生年-月-日
各个字段均用英文字符和数字表示。使用空格分隔各个字段,每个字段不包含空格,如:crq的信息为:
crq 660000 huangyan 1979-1-1
等到所有队员的资料收集完毕,我们想要编排通讯录以便于队员的查询,编排方式如下:
首先根据地名作为第一关键字进行字典序排序,由于每年老乡之间都要为队友庆祝生日,因此将生日作为第二关键字进行递增排序。也许你在老乡之间能够找到一个非常有缘的队友即你们的生日是同一天,那么就根据tojid作为第三关键字进行字典序排序,由于tojid是唯一的,因此总能排序。我们确信今后将有大量的新队友加入,因此为了能一劳永逸,请你帮我们编程完成这个任务。


Input

输入数据有n+1行,第一行为集训队队员的总数n (n<=100),下面的n行为每个队员的信息,格式见样例。

Output

输出编排后的结果。

Sample Input

5

crq 660000 huangyan 1979-1-1

carter 660000 huangyan 1979-1-1

tzc 668888 linhai 1990-1-11

wk 666666 ningbo 1986-10-1

metoo 665567 jiaojiang 1969-1-13

Sample Output

carter 660000 huangyan 1979-1-1

crq 660000 huangyan 1979-1-1

metoo 665567 jiaojiang 1969-1-13

tzc 668888 linhai 1990-1-11

wk 666666 ningbo 1986-10-1

代码块:

#include <algorithm>
#include <iostream>
#include <iomanip>
#include <cstring>
#include <vector>
using namespace std;

typedef struct book
{
char n[30],a[30],p2[30];
int p;
}book;

bool compare(const book &a,const book &b)
{
if ( strcmp(a.a,b.a)<0 )
return 1;
else if( strcmp(a.a,b.a)>0 )
return 0;
else
{
if ( strcmp(a.p2,b.p2)<0 )
return 1;
else if( strcmp(a.a,b.a)>0 )
return 0;
else
{
if ( strcmp(a.n,b.n)<0 )
return 1;
else return 0;
}
}

}
int main()
{
int n,i,j;
vector <book> v;
char s[100];
book b;
gets(s);

sscanf(s,"%d",&n);
// if (strlen(s)==0) break;
for (i=0; i<n; i++)
{
gets(s);
sscanf(s,"%s%d%s%s",b.n,&b.p,b.a,b.p2);
v.push_back(b);
}
sort(v.begin(),v.end(),compare);

for (i=0; i<n; i++)
cout<<left<<v[i].n<<" "<<v[i].p
<<" "<<v[i].a<<" "<<v[i].p2<<endl;
//  cout<<endl;
v.clear();

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: