普通坏键(除’+’):根据给出的大写字母直接对照should字符串的大小写字母,通过toupper()把字母全部转化为大写,进行对照删除。
特殊坏键(’+’):有特殊坏键之后,需要用tolower()把should字符串中的字母全部转换为小写字母。
#include<iostream>
#include<cstring>
#include<map>
using namespace std;
int main(){
string bad,should;
getline(cin,bad);
getline(cin,should);
for(int i=0;i<should.length();i++){
if(bad.find('+'))
should[i]=tolower(should[i]);
if(bad.find(toupper(should[i])) != string::npos)
should.erase(should.begin()+i);
}
cout << should;
return 0;
}
我的思路是直接删除,但是答案错误了。
看了一下柳神的思路,是continue跳过不合格的字符,把合格的字符输出。
难道直接删除不对吗?
好迷惑。
修改之后:
#include<iostream>
#include<cstring>
#include<cctype>
using namespace std;
int main(){
string bad,should;
getline(cin,bad);
getline(cin,should);
for(int i=0;i<should.length();i++){
if(bad.find('+')!= string::npos && isupper(should[i])) continue;
if(bad.find(toupper(should[i])) != string::npos) continue;
cout << should[i];
}
return 0;
}
tips:
- 可以使用string.erase函数
- string容器中不符合条件使用string::npos作为比较条件
- 因为有可能是空行,所以使用getline(cin,should)来输入字符串。
————————-——————
我发现我理解错误题目的意思了,如果’+'键坏了的话,所有的大写字母都不能输出,所以不仅仅要删除普通坏键,同时也要删除大写字母。
修改之后的代码通过了两个测试点。基本没有错误了。