PAT 1033.旧键盘打字
PAT 1033. 旧键盘打字
旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及坏掉的那些键,打出的结果文字会是怎样?
输入格式:
输入在2行中分别给出坏掉的那些键、以及应该输入的文字。其中对应英文字母的坏键以大写给出;每段文字是不超过105个字符的串。可用的字符包括字母[a-z, A-Z]、数字0-9、以及下划线“_”(代表空格)、“,”、“.”、“-”、“+”(代表上档键)。题目保证第2行输入的文字串非空。
注意:如果上档键坏掉了,那么大写的英文字母无法被打出。
输出格式:
在一行中输出能够被打出的结果文字。如果没有一个字符能被打出,则输出空行。
输入样例:
7+IE.
7_This_is_a_test.
输出样例:
_hs_s_a_tst
代码如下
#include<iostream>
#include<algorithm>
#include<cctype>
using namespace std;
int main(){
string broken,input;
int shift=0,flag=0;
getline(cin,broken); // 不能用cin,防止没有键坏了,即输入的第一行为空ԅ(¯﹃¯ԅ)
getline(cin,input);
auto it=find(broken.begin(),broken.end(),'+');
if(it!=broken.end())
shift=1;
it=find(broken.begin(),broken.end(),'_');
char c;
for(it=input.begin();it<input.end();it++){
int tag=1;
if(shift==1&&isupper(*it)) continue;
for(auto b=broken.begin();b<broken.end();b++){
if(islower(*it)){
c=toupper(*it);
}
else c=*it;
if(c==*b) tag=0;
}
if(tag==1) {cout<<*it; flag=1;}
}
if(flag) cout<<endl;
return 0;
}