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++;
}
}
}
}