题目描述
旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及坏掉的那些键,打出的结果文字会是怎样?
输入描述
输入在2行中分别给出坏掉的那些键、以及应该输入的文字。其中对应英文字母的坏键以大写给出;每段文字是不超过10^5个字符的串。可用的字符包括字母[a-z, A-Z]、数字0-9、以及下划线“_”(代表空格)、“,”、“.”、“-”、“+”(代表上档键)。题目保证第2行输入的文字串非空。
注意:如果上档键坏掉了,那么大写的英文字母无法被打出。
输出描述
在一行中输出能够被打出的结果文字。如果没有一个字符能被打出,则输出空行。
输入例子
7+IE.
7_This_is_a_test.
输出例子
_hs_s_a_tst
我的代码
#include<stdio.h>
#include<string.h>
#define N 100000
int main(){
char a[N],b[N],c[N];
long long i,j,len1,len2,p=0,t=0,m=0;
scanf("%s",a);
scanf("%s",b);
len1=strlen(a);
len2=strlen(b);
for(i=0;i<len1;i++){ //查找是否有+
if(a[i]=='+'){
p++;
break;
}
}
if(p!=0){ //有加号
for(i=0;i<len2;i++){
for(j=0;j<len1;j++){
if(!(b[i]==a[j]||b[i]==a[j]+32||(b[i]>=65&&b[i]<=90))){
t++;
if(t==len1){
c[m]=b[i];
m++;
}
}
}
t=0;
}
}
if(p==0){ //没有加号
for(i=0;i<len2;i++){
for(j=0;j<len1;j++){
if(!(b[i]==a[j]||b[i]==a[j]+32)){
t++;
if(t==len1){
c[m]=b[i];
m++;
}
}
}
t=0;
}
}
puts(c);
return 0;
}
我的分析
这道题和之前的1019.旧键盘的思路差不多,就是用两个循环在字符串中进行搜索,寻找有没有满足要求的字符。只不过这一道题多出来了一个判断是否有+的一个循环,我这里就是用p的数值来表示,一旦在搜索中找到了+,就将p的值+1,然后立即跳出循环,再在后面用两个if语句来分情况讨论。