PAT (Basic Level) Practice 1029 旧键盘 (20分)

1029 旧键盘 (20分)

旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。

输入格式:

输入在 2 行中分别给出应该输入的文字、以及实际被输入的文字。每段文字是不超过 80 个字符的串,由字母 A-Z(包括大、小写)、数字 0-9、以及下划线 _(代表空格)组成。题目保证 2 个字符串均非空。

输出格式:

按照发现顺序,在一行中输出坏掉的键。其中英文字母只输出大写,每个坏键只输出一次。题目保证至少有 1 个坏键。

输入样例:

7_This_is_a_test
_hs_s_a_es

输出样例:

7TI

C程序代码示例(无论何时都只会蛮力法的菜鸟)

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

int main(){
    char input[81]; //输入字符串
    char output[81];    //输出字符串
    int result[128]={0};    //用于计数坏键的字符,下标视为字符的asc码,数组的值为0视为好键,1为坏键
    scanf("%s %s",input,output);
    //循环开始,外层循环为输入字符数组,内层循环为输出字符数组
    for(int i=0,j=0;i<strlen(input);i++){
        for(;j<strlen(output);j++){
            if(output[j]==input[i]){    //若字符asc码等值,执行内层下标+1,并跳出内层循环
                j++;
                break;
            }else if(input[i]>=65 && input[i]<=90){     //若字符asc码不相等,但为大写字母,继续判断是否是大小写字母相等关系
                if(output[j]==input[i]+32){
                    j++;
                    break;
                }else {
                    if(result[(int)input[i]]==0){       //字符不相等,首先判断结果集中是否记录过该字符,避免重复输出。下同,代码没有使用函数封装
                        printf("%c",input[i]);
                        result[(int)input[i]]++;
                    }
                    break;
                }
            }else {
                if(input[i]>=97 && input[i]<=122){      //输出的字符只能为大写,需要转换为大小字母
                    input[i]-=32;
                }
                if(result[(int)input[i]]==0){
                    printf("%c",input[i]);
                    result[(int)input[i]]++;
                }
                break;
            }
        }
        if(j==strlen(output)){      //当内层循环结束时,执行该代码块
            i++;
            while(i<strlen(input)){ //将input数组中余下的字符串直接与结果集result比较判断是否重复
                if(input[i]>=97 && input[i]<=122){
                    input[i]-=32;
                }
                if(result[(int)input[i]]==0){
                    printf("%c",input[i]);
                    result[(int)input[i]]++;
                }
                i++;
            }
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值