题目描述:
旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。
输入格式:
输入在 2 行中分别给出应该输入的文字、以及实际被输入的文字。每段文字是不超过 80 个字符的串,由字母 A-Z(包括大、小写)、数字 0-9、以及下划线 _(代表空格)组成。题目保证 2 个字符串均非空。
输出格式:
按照发现顺序,在一行中输出坏掉的键。其中英文字母只输出大写,每个坏键只输出一次。题目保证至少有 1 个坏键。
输入样例:
7_This_is_a_test
_hs_s_a_es
输出样例:
7TI
本人AC代码:
// PAT_1029_Broken_Key
# include <stdio.h>
# include <string.h>
int main(void)
{
char S1[100]; // 记录本应该输入的字符
char S2[100]; // 记录实际输出的字符
char Break_Key[85]; // 记录坏掉的键
int i=0, j=0, k=0;
int len1, len2;
int flag = 1;
int n = 0; // 记录坏掉的键个数
// 输入字符串
gets(S1);
gets(S2);
len1 = strlen(S1);
len2 = strlen(S2);
for(i=0;i<strlen(S1);i++)
{
if(S1[i]>='a'&&S1[i]<='z')
S1[i]=S1[i]-32;
}
for(i=0;i<strlen(S2);i++)
{
if(S2[i]>='a'&&S2[i]<='z')
S2[i]=S2[i]-32;
}
i=j=0;
// 开始比对字符串
while (i<len1 || j<len2)
{
// 如果对应位置不相同,则说明该键是坏键
// 有坏键则S2下标不动
if (S1[i] != S2[j])
{
// 判断是否在已经坏掉的字符串中出现过
k=0;
flag = 1;
while (Break_Key[k] != '\0')
{
// 如果S1[i] 在Break_Key 字符串中出现过,则不再继续,设置标志符号flag=0;
if (S1[i] == Break_Key[k])
{
flag = 0;
break;
}
k++;
}
// 写入的时候,字母大写
if (flag == 1)
{
Break_Key[n] = S1[i];
n++;
}
i++;
}
// 否则,说明该键没问题
else
{
i++;
j++;
}
}
for (i=0; i<n; i++)
{
printf("%c",Break_Key[i]);
}
printf("\n");
return 0;
}
RRR