有一个测试点巨坑
在没有一个按键是坏的情况下,第一行输入为空,只有一个 ‘\n’ ,因此要想办法单独处理这一种情况
以下是代码
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
bool ASCII[128];
char broken[100001];
char output[100001];
int main() {
int flag = 1;//标志上档键是否损坏
fill(ASCII,ASCII+128,1);//STL中的填充数组的函数
//处理第一行输入为空的情况,即没有损坏的按键
if(cin.peek()=='\n'){
getchar();
scanf("%s",output);
printf("%s",output);
return 0;
}
scanf("%s",broken);
scanf("%s",output);
int len1 = strlen(broken);
int len2 = strlen(output);
for(int i=0; i<len1; i++) {
//若有一个字母是坏的,则把它的大小写都标记为false
if(broken[i]<='Z'&&broken[i]>='A') {
ASCII[broken[i]] = false;
ASCII[broken[i]+('a'-'A')] = false;
}
//单独测试上档键是否损坏
else if(broken[i] == '+') {
flag =0;
ASCII[broken[i]] = false;
}else{
ASCII[broken[i]] = false;
}
}
int x=0;
for(int i=0; i<len2; i++) {
if(ASCII[output[i]]) {
//输出分为上档键损坏和没损坏两种情况
if(flag) {
printf("%c",output[i]);
x++;
} else {
if(output[i]>'Z'||output[i]<'A') {
printf("%c",output[i]);
x++;
}
}
}
}
//若x还是等于零,则没有输出任何字符,按题意输出换行
if(x==0)printf("\n");
return 0;
}