PAT-B 1029. 旧键盘(20)

题目链接在此

思路

由于是键盘,所以字母的大小写是不区分的,符合常理。

本题需要注意两点:
1. 如何在不区分大小写的情况下判断在s1中出现的字符在s2中没有出现过
2. 如何做到同一字符只输出一次,并且英文字母只输出大写形式

以上两点也是解题的思路。

做法:
1. 遇到小写字母直接转换成大写
2. 遍历s1的每个字符c1的过程中遍历s2的每个字符c2,如果c1==c2则说明该字符在s1和s2中都出现过;如果不相等,则继续枚举s2的下一个字符。 如果对于c1在s2中无法找到相应的c2与之相等,并且c1没有输出过,则输出
3. 解决上面一点的问题:如何判断有没有输出过。用一个bool型数组HashTable[128](ASCII总共有128个)记录输出的情况

AC代码

#include<stdio.h>
#include<string.h>

int main(){

    char s1[81], s2[81];
    bool isPrint[128] = {false};

    scanf("%s",s1);
    scanf("%s",s2);

    for(int i = 0; i < strlen(s1); i++){
        char c1, c2;
        int j;

        for(j = 0; j < strlen(s2); j++){
            c1 = s1[i];
            c2 = s2[j];

            if(c1 >= 'a' && c1 <= 'z') c1 -= 32;
            if(c2 >= 'a' && c2 <= 'z') c2 -= 32;

            if(c1 == c2) break; 
        }

        if(j == strlen(s2) && isPrint[c1] == false){
            printf("%c",c1);
            isPrint[c1] = true;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值