1033. 旧键盘打字(20)

来源:互联网 发布:风月知相思 在线阅读 编辑:程序博客网 时间:2024/05/22 17:43

题目链接

题目:

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

输入格式:

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

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

输出格式:

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

输入样例:
7+IE.7_This_is_a_test.
输出样例:
_hs_s_a_tst

题解:

简单的字符串处理。这道题比较坑的地方是,第一行有可能是空的,用cin读入的话会把空行(\n \t以及空格)跳过,所以这里用了cin.getline

代码:

#include <iostream>#include <string.h>using namespace std;const int MAXN = 100000 + 5;char bad[MAXN], s[MAXN];int mark[256], flag = 0;int main(){//freopen("a.txt", "r", stdin);cin.getline(bad, MAXN);cin.getline(s, MAXN);//cin >> bad >> s;memset(mark, 0, 256 * sizeof(int));int L1 = strlen(bad);int L2 = strlen(s);for (int i = 0; i < L1; i++)//将坏键都做好标记{mark[bad[i]] = 1;if (bad[i] >= 'A' && bad[i] <= 'Z')mark[bad[i] - 'A' + 'a'] = 1;if (bad[i] == '+')flag = 1;}for (int i = 0; i < L2; i++)//扫描字符串,坏键不做输出,若+也坏掉,大写字母也不输出{if ((s[i] >= 'A' && s[i] <= 'Z') && flag)continue;if (mark[s[i]] == 0){cout << s[i];}}cout << endl;return 0;}