PAT-乙级-1033. 旧键盘打字(20)

1033. 旧键盘打字(20)

时间限制
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

 思路:‘+’和‘_’是关键,都要判断

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int main()
 4 {
 5     char a[100010],b[100010];
 6     int aa[100010]= {0};
 7     gets(a);
 8     gets(b);
 9     int shift=0,blank=0;
10     int la=strlen(a);
11     int lb=strlen(b);
12     for(int i=0; i<la; i++)
13     {
14         aa[a[i]]=1;
15         if(islower(a[i]))
16         {
17             a[i]-=32;
18             aa[a[i]]=1;
19         }
20         else if(isupper(a[i]))
21         {
22             a[i]+=32;
23             aa[a[i]]=1;
24 
25         }
26         if(a[i]=='+')
27             shift=1;
28         if(a[i]=='_')
29             blank=1;
30 
31     }
32     for(int i=0; i<lb; i++)
33     {
34         if(shift)
35         {
36             if(!isupper(b[i])&&aa[b[i]]==0)
37                 cout<<b[i];
38         }
39         else if(blank){
40             if(b[i]!=' '&&aa[b[i]]==0)
41             cout<<b[i];
42         }
43         else
44         {
45             if(aa[b[i]]==0)
46                 cout<<b[i];
47         }
48     }
49     return 0;
50 }

 

posted @ 2016-07-13 01:15  April_AA  阅读(366)  评论(0编辑  收藏  举报