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

输入格式:

输入在 2 行中分别给出坏掉的那些键、以及应该输入的文字。其中对应英文字母的坏键以大写给出;每段文字是不超过 105 个字符的串。可用的字符包括字母 [a-z, A-Z]、数字 0-9、以及下划线 _(代表空格)、,.-+(代表上档键)。题目保证第 2 行输入的文字串非空。

注意:如果上档键坏掉了,那么大写的英文字母无法被打出。

输出格式:

在一行中输出能够被打出的结果文字。如果没有一个字符能被打出,则输出空行。

输入样例:

  1. 7+IE.
  2. 7_This_is_a_test.

输出样例:

  1. _hs_s_a_tst

思路

我们用动态处理的方法:读入一个字符,处理一个字符。

用一个char型数组keyboard[256]来存放所有的键盘信息(ASCII字符也就128个)。当数组值为1,则说明该键坏掉了。


代码

  1. #include<cstdio>
  2. #include<cstring>
  3. int main() {
  4. int keyboard[256] = {0};
  5. char tempChar;
  6. while((tempChar = getchar()) != '\n') { /* 读入第一行字符串 */
  7. if(tempChar >= 'A' && tempChar <= 'Z') { /* 大写字母和小写字母是同一个键 */
  8. keyboard[tempChar - 'A' + 'a'] = 1; /* 大写字母坏了,小写字母也坏了 */
  9. }
  10. keyboard[tempChar] = 1; /* 记录该键已坏 */
  11. }
  12. if(keyboard['+']) { /* 如果上档键坏了,所有大写字母都坏了 */
  13. for(int i = 'A'; i < 'Z'; i++) {
  14. keyboard[i] = 1;
  15. }
  16. }
  17. while((tempChar = getchar()) != '\n') { /* 读入第二行字符串 */
  18. if(keyboard[tempChar]) { /* 如果这个键坏了,就跳过 */
  19. continue;
  20. }
  21. putchar(tempChar); /* 该键未坏,则输出 */
  22. }
  23. return 0;
  24. }