1033 旧键盘打字 (20 分)
旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及坏掉的那些键,打出的结果文字会是怎样?
输入在 2 行中分别给出坏掉的那些键、以及应该输入的文字。其中对应英文字母的坏键以大写给出;每段文字是不超过 105 个字符的串。可用的字符包括字母 [a
-z
, A
-Z
]、数字 0
-9
、以及下划线 _
(代表空格)、,
、.
、-
、+
(代表上档键)。题目保证第 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比较难想到,当并没存在坏键的时,就应该直接输出,因为此时的查找函数是无效的。