题目描述
旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。
输入描述
输入在2行中分别给出应该输入的文字、以及实际被输入的文字。每段文字是不超过80个字符的串,由字母A-Z(包括大、小写)、数字0-9、以及下划线“_”(代表空格)组成。题目保证2个字符串均非空。
输出描述
按照发现顺序,在一行中输出坏掉的键。其中英文字母只输出大写,每个坏键只输出一次。题目保证至少有1个坏键。
输入例子
7_This_is_a_test
_hs_s_a_es
输出例子
7TI
我的代码
#include<stdio.h>
#include<string.h>
int main(){
char a[1000],b[1000],c[1000];
int len1,len2,i,j,k=0,t=0,m=0,d[1000];
scanf("%s",a);
scanf("%s",b);
len1=strlen(a);
len2=strlen(b);
for(i=0;i<len1;i++){ //开始寻找出错的按键
for(j=0;j<len2;j++){
if(a[i]!=b[j]){
k++;
if(k==len2){ //如果没有找到
c[t]=a[i]; //将这些字符放在字符串c[ ]中
t++;
}
}
}
k=0; //k要赋初值0
}
k=0;
for(i=0;i<t;i++){ //将小写字母转换成大写字母
if(c[i]>=97&&c[i]<=122){
c[i]=c[i]-32;
}
}
for(i=0;i<t;i++){ //开始排除重复的字符
for(j=i+1;j<t;j++){
if(c[i]==c[j]){
d[k]=j; //将重复字符的下标存储在数组d[ ]中
k++;
}
}
}
for(i=0;i<t;i++){ //开始输出
for(j=0;j<k;j++){
if(i!=d[j]){ //如果下标之前存在于数组d[ ]当中
m++;
if(m==k){
printf("%c",c[i]);
}
}
}
m=0;
}
return 0;
}
我的分析
这道题算是我绞尽脑汁的一道题了。我的思路是先将输入的两段字符串相比较,将第二段中所缺少的字符存在c[ ]数组中,然后就是将c数组中的小写字母换成大写的,接着就是在输出时不将重复的字符再次输出,我也就是卡在了这里很长时间,后来想到了代码所示的方法:先用一个数组将c[ ]中重复的字符位置记下来,然后在输出之前先判断它的位置是否在数组里面,如果不在,则输出,如果在,就不能重复输出。
网友评论