PAT B1033 旧键盘上的几个键又毁坏了,于是在输入一段文字时,对应得的字符就不会出现。

题中可用的字母包括大小写(给出的坏键的字母,全为大写),数字,"_" “,” “.” “-” “+”,并且用“+”号代表上档键即(SHIFT)。
输入的两行中分别给出那些坏掉的键,以及应该输出的文字。
输出可以出现的结果文字

分析:
1.给出的坏键的字母全为大写,因此为了统一写法应该先转化为小写,这样小写与大写都无法输出了(符合实际)
2.再给出应该出现的字符串时,如有大写字母应该保证其小写字母的键位与上档键(“+”)同时完好才能输出,并且应该输出大写字母,若只有小写字母完好,则输出的为小写。

 1 #include<cstdio>
 2 #include<cstring>
 3 const int maxn = 100010;
 4 bool hashTable[256];
 5 char str[maxn];
 6 int main() {
 7     memset(hashTable, true, sizeof(hashTable));//初始全部定true,表示键全部完好。
 8     gets_s(str);//输入坏掉的键
 9     int len = strlen(str);
10     for (int i = 0; i < len; i++) {
11         if (str[i] >= 'A' && str[i] <= 'Z') {//先将字母键位全部转换为小写,方便之后判断是否输出
12             str[i]+= 32;
13         }
14         hashTable[str[i]] = false;     //将坏了的键全部标记住。
15     }
16     gets_s(str);                      //输入应该输入的字符串
17     len = strlen(str);
18     for (int i = 0; i < len; i++) {
19         if (str[i] >= 'A' && str[i] <= 'Z') {
20             int temp = str[i] + 32;
21             if (hashTable[temp] == true && hashTable['+'] == true) {//只有该字母键与上档键全部完好,才可以进行输出大写字母
22                 printf("%c", str[i]);
23             }
24         }
25             else if (hashTable[str[i]] == true) {
26                 printf("%c", str[i]);//其他键位只要完好便可以输出
27             }
28         }
29     printf("\n");
30     return 0;
31     }

 

上一篇:了解HashTable集合


下一篇:java-HashTable