PAT B1033 旧键盘打字

题目与B1029类似 但是略有区别 略微有坑 稍微想了一会儿特殊情况 在pat中有些题目一定要考虑周全 把所有的情况都考虑在内即可!
题目大意:
第一行是坏的按键 即输入这些字符是不显示的,其中‘+’是上档键 就是切换大写字母的,如果加号键坏掉了 那么就不可以打印出大写字母。
第二行是预期输入的字符串,要求输出实际上输出的字符串。
题目的坑点:也就是第三个测试点(应该是),其中需要考虑的是如果第一行没有的话 也就是说没有任何的字符或者是键盘的按键坏了 那么第一行是直接的空行。
本人一直喜欢用cin 然而cin的输入时不吃回车的。因此就需要用getline来输入第一行。

这里还需要提醒自己或者同学注意的是 getline是获取一行,并且是以回车为结束标志的输入。 一个情况是如果上面用了cin作为输入,如果在接下来需要用到getline来输入,那么需要在之前先用getline来吃掉cin之后的回车,不然直接在cin之后的getline只会吃到回车,不会获取到预期的字符串。

例如下列代码:

#include<iostream>
using namespace std;
int main(){
	string a,b;
	cin>>a;
	getline(cin,b);
	cout<<a<<"1111"<<b; 
}

该程序运行之后得到的结果如图所示
在这里插入图片描述

解题代码如下:

/*
cin之后的回车是被忽略的 如果在cin之后使用getline 
cin之后的回车就会被getline给吃掉 
*/
#include<iostream>
#include<stdlib.h>
#include<queue>
#include<stack>
#include<algorithm>
#include<map>
#include<cstring>
using namespace std;
char input[100005];
int main(){
	string ban;
	getline(cin,ban);
	cin>>input;
	int a2n,m[150];
	memset(m,-1,150*sizeof(int));
	for(int i=0;ban[i]!='\0';i++){
		if(ban[i]=='+'){
			for(int j=65;j<91;j++)
				m[j]=0;
		}
		else{
			a2n=(int)ban[i];
			m[a2n]=0;
			if(a2n<91&&a2n>64)
				m[a2n+32]=0;
		} 
	}
	int flag=0;
	for(int i=0;input[i]!='\0';i++){
		a2n=(int)input[i];
		if(m[a2n]==-1){
			flag=1;
			cout<<input[i];
		}	
	}
	if(flag==0)
		cout<<endl;
}
/*
+  43
,  44
-  45
.  46
7+IE.
7_This_is_a_test.

*/ 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值