查找姓名按字典序从小到大输出(C)

题目描述

用全拼查找人名比较麻烦,如果通过缩写查找姓名会方便很多。现给出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;
}

  • 15
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用Python中的sorted函数来实现字符串按字典序排序。具体代码如下: strings = input("请输入3个字符串,以空格分隔:").split() sorted_strings = sorted(strings) print("按字典序排序后的字符串为:", sorted_strings) 运行结果如下: 请输入3个字符串,以空格分隔:apple banana cat 按字典序排序后的字符串为: ['apple', 'banana', 'cat'] ### 回答2: 题目要求我们输入3个字符串,并且按字典序从小到大进行排序。那么我们就需要先了解一下什么是字典序字典序是一种基于字母顺序的排序方法,也就是说在字典序中,a在b之前,b在c之前,以此类推。当两个单词的首字母相同时,比较第二个字母,依次类推,直到找到有差异的字母为止。比如“apple”和“apricot”,首字母都是“a”,那么我们就比较第二个字母,即“p”和“r”,发现“p”在字母表中比“r”靠前,因此“apple”在字典序中比“apricot”要小。 了解了字典序之后,我们就可以开始解题了。首先,我们需要输入三个字符串,可以使用input()函数再结合索引值来分别输入这三个字符串。比如: str1 = input("请输入第一个字符串:") str2 = input("请输入第二个字符串:") str3 = input("请输入第三个字符串:") 接下来,我们就需要进行排序了。Python中有多种排序方法,这里我们选择使用sort()函数对这三个字符串进行排序。sort()函数默认按照字典序从小到大排序,因此我们只需要简单地调用这个函数就可以了。比如: str_list = [str1, str2, str3] # 将三个字符串定义为列表元素 str_list.sort() # 对列表中的元素进行排序 print(str_list) # 输出排序后的结果 最后,我们将这三个字符串定义成一个列表,并使用sort()函数进行排序,并将排序后的结果输出。这样就完成了题目要求。 完整代码如下: str1 = input("请输入第一个字符串:") str2 = input("请输入第二个字符串:") str3 = input("请输入第三个字符串:") str_list = [str1, str2, str3] str_list.sort() print(str_list) ### 回答3: 题目要求对输入的3个字符串进行排序,按字典序从小到大排列。首先我们需要明确字典序的概念,字典序是指按照字母的先后顺序对字符串进行排序。可以理解为,以第一个字符为比较对象,如果相同则比较下一个字符,以此类推,直到不同为止。 一个简单的解决方案是使用字符串比较的函数来进行排序,比如在Python中可以使用sorted()函数,该函数的参数可以接受一个可迭代对象,并返回一个新的按照字典序从小到大排列的列表。输入的3个字符串可以作为这个函数的参数传入,如下所示: ``` a = input('请输入第一个字符串:') b = input('请输入第二个字符串:') c = input('请输入第三个字符串:') result = sorted([a, b, c]) print(result) ``` 这样就可以将输入的3个字符串按字典序从小到大排序并输出了。另外,如果我们需要忽略大小写来进行排序,可以在sorted()函数中加入key参数,将字符串转换为小写字母进行比较: ``` a = input('请输入第一个字符串:') b = input('请输入第二个字符串:') c = input('请输入第三个字符串:') result = sorted([a, b, c], key=str.lower) print(result) ``` 总之,对于这道题目,我们需要对字典序的概念有一定的了解,并使用合适的函数或算法来实现按字典序排序的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值