这题也很基础,是第一题的变形。
时间限制
200 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue
旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及坏掉的那些键,打出的结果文字会是怎样?
输入格式:
输入在2行中分别给出坏掉的那些键、以及应该输入的文字。其中对应英文字母的坏键以大写给出;每段文字是不超过105个字符的串。可用的字符包括字母[a-z, A-Z]、数字0-9、以及下划线“_”(代表空格)、“,”、“.”、“-”、“+”(代表上档键)。题目保证第2行输入的文字串非空。
注意:如果上档键坏掉了,那么大写的英文字母无法被打出。
输出格式:
在一行中输出能够被打出的结果文字。如果没有一个字符能被打出,则输出空行。
输入样例:7+IE. 7_This_is_a_test.输出样例:
_hs_s_a_tst
很简单,第一行所有元素储存在一个坏元素数组里面(字母有可能有大小写的区别,我们只储存一种小写,因为下面的小写可以和其他元素一起讨论)。然后遍历第二行,如果对应元素坏了,不输出,如果好就输出。这题的小难点在于大小写,我们先讨论大写字母,大写字母不仅要求对应字母没有坏,还要换挡+键没坏。其他字母,就直接访问即可。
代码:
#include<stdio.h>
#include<string.h>
int main(){
char str1[100010],str2[100010];
int ch[130]={0};
gets(str1);
gets(str2);
int i,j,len1=strlen(str1),len2=strlen(str2);
for(i=0;i<len1;i++){//遍历str1,坏的字母全部储存,只存小写
if(str1[i]<='Z'&&str1[i]>='A')
str1[i]+=32;
ch[str1[i]]=1;
}
for(i=0;i<len2;i++){
if(str2[i]<='Z'&&str2[i]>='A'){//大写比较特殊,单独讨论
if(ch[str2[i]+32]==0&&ch['+']==0)//必须要对应字母好+换挡好才输出
printf("%c",str2[i]);
}
else
if(ch[str2[i]]==0) //其他
printf("%c",str2[i]);
}
return 0;
}