题目描述
用全拼查找人名比较麻烦,如果通过缩写查找姓名会方便很多。现给出n(1≤n≤100)个人的姓名全拼和一个姓名缩写,请你快速查找出该缩写对应的人名。
输入
第1行为n(1≤n≤100)
第2行-第n+1行为学生的姓名(拼音表示,每个汉字的拼音首字母大写,姓和名之间用空格隔开),
最后一行为要查询的姓名缩写(全部小写)。数据保证没有重复的名字,每行字符串长度不超过30。
输出
查询到的姓名都输出,按字典序从小到大输出,每个输出占1行;如果查询不到,输出No。
字典序,是按字母顺序排列的方法。
例如:"aaabc" < "aaacc","Wang SaiYun"<"Wang SuYun"
样例输入
Wang JingWen
Wang SaiYun
Chai XiaoMeng
Wang SuYun
Zhang ShiQuan
wsy
样例输出
Wang SaiYun
Wang SuYun
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct{
char name[31];
}Person;
Person p[101];
int cmp(const void *e1, const void *e2){
Person *a = (Person *)e1;
Person *b = (Person *)e2;
return strcmp(a->name,b->name) < 0? -1:1;
}
int check(int n,char c[]){
char Upname[31] = {0};
int tf = 1;
//printf("%s",c);
for(int i = 0; i < strlen(c);i++){
int span = 'a' - 'A';
c[i] = c[i] - span;
}
//printf("%s",c);
for(int i = 0; i < n; i++){
int t = 0;
for(int j = 0; j < strlen(p[i].name); j++){
if(p[i].name[j] <= 'Z' && p[i].name[j] >= 'A'){
Upname[t] = p[i].name[j];
t++;
}
}
if(strcmp(c,Upname) == 0){
printf("%s\n",p[i].name);
tf = 0;
}
}
if(tf == 1){
printf("No");
}
return 0;
}
int main(){
int n = 0;
scanf("%d\n",&n);
for(int i = 0; i < n; i++){
gets(p[i].name);
//printf("%s\n",p[i].name);
}
char c[31] = {0};
gets(c);
qsort(p,n,sizeof(Person),cmp);
check(n,c);
return 0;
}