PAT B 1033旧键盘打字

普通坏键(除’+’):根据给出的大写字母直接对照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)来输入字符串。
    ————————-——————
    我发现我理解错误题目的意思了,如果’+'键坏了的话,所有的大写字母都不能输出,所以不仅仅要删除普通坏键,同时也要删除大写字母。
    修改之后的代码通过了两个测试点。基本没有错误了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值