1033. 旧键盘打字(20)
旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及坏掉的那些键,打出的结果文字会是怎样?
输入格式:
输入在2行中分别给出坏掉的那些键、以及应该输入的文字。其中对应英文字母的坏键以大写给出;每段文字是不超过105个字符的串。可用的字符包括字母[a-z, A-Z]、数字0-9、以及下划线“_”(代表空格)、“,”、“.”、“-”、“+”(代表上档键)。题目保证第2行输入的文字串非空。
注意:如果上档键坏掉了,那么大写的英文字母无法被打出。
输出格式:
在一行中输出能够被打出的结果文字。如果没有一个字符能被打出,则输出空行。
输入样例:7+IE.
7_This_is_a_test.
输出样例:
_hs_s_a_tst
感觉这道题和第29题(旧键盘)就是一个模子里刻出来的么,有木有!连数据都那么像。思路还是一样的,不过感觉在做题的过程中我真的变得“大方”多了,一开始连一个变量都省着定义(从我的1029能看出来)到现在只要不是特别大的空间都直接给了,通过少量空间的牺牲换取思维的通畅性。下面是我的代码:
#include<stdio.h>
int main(void)
{
static int c[300];
char C;
int i=0,j;
do
{
scanf("%c",&C);
if (C=='+') //有上档键之后标记所有大写不可用
{
for (j='A';j<='Z';j++)
{
c[j]=1;
}
}
else
{
if (C!='\n')
{
c[C]=1;
if (C>='A'&&C<='Z')//注意是以大写形式给出的坏键哦,要将对应的小写字母标记了
{
c[C+32]=1;
}
}
}
}while(C!='\n');
do
{
scanf("%c",&C);
if (c[C]!=1 && C!='\n') printf("%c",C);
}while(C!='\n'); //我也不记得我为什么没有输出换行了,可能这是这道题的一个坑,换行可能反而有问题
return 0;
}