题目描述:
旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及坏掉的那些键,打出的结果文字会是怎样?
输入描述:
输入在2行中分别给出坏掉的那些键、以及应该输入的文字。其中对应英文字母的坏键以大写给出;每段文字是不超过10^5个字符的串。可用的字符包括字母[a-z, A-Z]、数字0-9、以及下划线“_”(代表空格)、“,”、“.”、“-”、“+”(代表上档键)。题目保证第2行输入的文字串非空。
注意:如果上档键坏掉了,那么大写的英文字母无法被打出。
输出描述:
在一行中输出能够被打出的结果文字。如果没有一个字符能被打出,则输出空行。
输入例子:
7+IE.
7_This_is_a_test.
输出例子:
_hs_s_a_tst
补充:
- 只要是字符串a中出现的在字符串b中一律删除(字母无论大小写均删除)。
- 在输入的时候,应当允许输入空格,否则测试点2会出现错误,所以应当采用getline(cin,string)。
- 注意“+”上档键,当上档键出现时,输出中不允许有大写字母。
源代码:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main(int argc, char** argv) {
string a,b;
getline(cin,a);
getline(cin,b);
int count=0,num=0;
int alength=a.length();
int blength=b.length();
//只要是字符串a中出现的在字符串b中一律删除(无论字母大小写)
for(int i=0;i<alength;i++){
if(a[i]>='A'&&a[i]<='Z'){
b.erase(remove(b.begin(),b.end(),a[i]),b.end());
b.erase(remove(b.begin(),b.end(),a[i]+32),b.end());
}
else
b.erase(remove(b.begin(),b.end(),a[i]),b.end());
}
//如果删除后的字符串b为空
if(b.empty()){
cout<<endl;
}
else{
//输出时如果a中出现了'+'则不输出大写
for(int i=0;i<alength;i++){
if(a[i]=='+'){
count++;
break;
}
}
if(count==0){
cout<<b;
}
else{
for(int j=0;j<b.length();j++){
if(!(b[j]>='A'&&b[j]<='Z'))
cout<<b[j];
}
}
return 0;
}
}
/*
7+IE.
7_This_is_a_test.
*/