PAT

1033.旧键盘打字

2018-08-08  本文已影响4人  yzbkaka

题目描述

旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及坏掉的那些键,打出的结果文字会是怎样?

输入描述

输入在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语句来分情况讨论。

上一篇下一篇

猜你喜欢

热点阅读