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;
} 
posted @ 2017-12-25 19:06  A-Little-Nut  阅读(122)  评论(0编辑  收藏  举报