1033 旧键盘打字 (20 分)

  • 2019 年 10 月 4 日
  • 筆記

1033 旧键盘打字 (20 分)

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

输入格式:

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

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

输出格式:

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

输入样例:

7+IE.  7_This_is_a_test.  

输出样例:

_hs_s_a_tst

【我的代码】

// 1033 旧键盘打字 (20 分).cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。  //    #include <iostream>  #include <string>  #include <algorithm>  using namespace std;  bool find(string str, char s) {      for (int i = 0; i < str.length(); i++) {          if (str[i] == s)              return true;      }      return false;  }  int main(){      //输入      string worse_key;      string input;      getline(cin, worse_key);      getline(cin, input);      if (worse_key.length() == 0) {          cout << input;          return 0;      }      bool upsize_flag = false;      //判断大小写      if (find(worse_key, '+')) {          upsize_flag = true;      }      //坏件变小写      if(upsize_flag)          transform(worse_key.begin(), worse_key.end(), worse_key.begin(), ::tolower);        //输出      for (int i = 0; i < input.length(); i++) {          if (find(worse_key, input[i])) {              continue;          }          if (input[i] >= 'A' && input[i] <= 'Z' && upsize_flag) {              continue;          }          if (input[i] >= 'a' && input[i] <= 'z') {              if (find(worse_key, input[i] - 32)) {                  continue;              }          }          cout << input[i];      }      cout << endl;  }  

其实就是一个输出判断的过程,但是测试点2比较难想到,当并没存在坏键的时,就应该直接输出,因为此时的查找函数是无效的。