1033 旧键盘打字
题目:
旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及坏掉的那些键,打出的结果文字会是怎样?
输入格式:
输入在 2 行中分别给出坏掉的那些键、以及应该输入的文字。其中对应英文字母的坏键以大写给出;每段文字是不超过 10^5个字符的串。可用的字符包括字母 [a-z, A-Z]、数字 0-9、以及下划线 _(代表空格)、,、.、-、+(代表上档键)。题目保证第 2 行输入的文字串非空。
注意:如果上档键坏掉了,那么大写的英文字母无法被打出。
输出格式:
在一行中输出能够被打出的结果文字。如果没有一个字符能被打出,则输出空行。
输入样例:
7+IE.
7_This_is_a_test.
输出样例:
_hs_s_a_tst
代码:
#include<iostream>
#include<string.h>
#include<string>
#define MAX 100000
using namespace std;
int main() {
//string bad;
string s;
char bad[MAX];
char c;
int i;
for (i = 0; (c = getchar()) != '\n'; i++) {
bad[i] = c;
}
cin >> s;
int bad_len =i;
//这个对本题没有用
//if (bad_len == 0) {
// cout << s;
// return 0;
//}
int s_len = s.length();
int j;
int flag = 0;//用来标记里面是否有+,即上档键
for (i = 0; i < bad_len; i++) {
if (bad[i] == '+') {
flag = 1;
break;
}
}
int num = 0;//用来标记这个字符是否可以打印出来
int a = 0;//用来记录是否有输出
//所有的大写都打不出来
if (flag == 1) {
//把坏键都转化为小写
for (i = 0; i < bad_len; i++) {
if (bad[i]>='A'&&bad[i]<='Z') {
bad[i] = bad[i] + ('a'-'A');
}
}
for (j = 0; j < s_len; j++) {
num = 0;
if (s[j] >= 'A'&&s[j] <= 'Z') {
num = 1;
continue;
}
else {
for (i = 0; i < bad_len; i++) {
if (s[j] == bad[i]) {
num = 1;
break;
}
}
}
if (num == 0)
cout << s[j];
}
}
//大写可以打出来
else {
//把坏键都转化为大写
//注意这种string的末尾增加一个字符的方式
for (i = 0; i < bad_len; i++) {
if (bad[i] >= 'A'&&bad[i] <= 'Z') {
bad[bad_len++]= 'a' - 'A' + bad[i];
/* 这种是string的写法
char c = 'a' - 'A' + bad[i];
bad=bad+c;
bad_len++;*/
}
}
//cout << bad;
for (j = 0; j < s_len; j++) {
num = 0;
for (i = 0; i < bad_len; i++) {
if (s[j] == bad[i]) {
num = 1;
break;
}
}
if (num == 0)
{
cout << s[j];
a++;
}
}
}
//如果没有一个字符能被打出,则输出空行。
if (a == 0)
cout << "\n";
return 0;
}
//注意考虑俩种特殊情况:
//①如果没有一个字符能被打出,则输出空行。
//②坏键为空。
//题目保证第 2 行输入的文字串非空,但没保证第1行输入的文字串非空,因此若第1行输入为空时要有相应的处理,否则将导致测试点2不通过。
注意:
考虑俩种特殊情况:
①如果没有一个字符能被打出,则输出空行。
②坏键为空。
题目保证第 2 行输入的文字串非空,但没保证第1行输入的文字串非空,因此若第1行输入为空时要有相应的处理,否则将导致测试点3不通过。
若第1行文字串的输入用如下形式:
scanf("%s",str);
或者下面这种:
string str;
则当第1行为空时,由于%s不能读入回车,其会跳过第1行直接将第2行的内容读入str[]。此处我们可采用如下方式来读入,这样第1行为空时也不会影响到下一行,当然还有很多其它方式。
for(int i = 0; (c = getchar()) != '\n'; i++){
str[i] = c;
}
主要要考虑到这些特殊的情况。