【PTA刷题整理】PAT 乙级 1033 旧键盘打字

2020.04.16 昨天的题目没做完,今天早上补交😁😁😁😁😁😁


1033 旧键盘打字 (20分)

旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及坏掉的那些键,打出的结果文字会是怎样?
输入格式:

输入在 2 行中分别给出坏掉的那些键、以及应该输入的文字。其中对应英文字母的坏键以大写给出;每段文字是不超过 10​5​​ 个字符的串。可用的字符包括字母 [a-z, A-Z]、数字 0-9、以及下划线 _(代表空格)、,、.、-、+(代表上档键)。题目保证第 2 行输入的文字串非空。

注意:如果上档键坏掉了,那么大写的英文字母无法被打出。
输出格式:

在一行中输出能够被打出的结果文字。如果没有一个字符能被打出,则输出空行。
输入样例:

7+IE.
7_This_is_a_test.

输出样例:

_hs_s_a_tst


昨晚就开了的题,有一组样例没过,就去碎觉了
题意非常简单,首先需要对上档键进行判断是否损坏,如果损坏了,进行标记,且所有的大写英文字母无法输出(使用isupper进行判断),其次就是对每个字母使用toupper进行大写化,再判断是否是损坏的键位,数字等其他符号直接判断是否损坏即可
注意的是,如果没有一个字符被打出,则输出空行,一开始我做的处理是先进行判断匹配,将能打印出来的字符放进一个新的字符串里面,最后将这个答案字符串输出。但是这样忽略了一种情况,如果一开始不存在损坏的键位,就无法进行匹配也无法写入到字符串里面,所以就改用getline来接收损坏键位,即便损坏字符串为空也会是一个空行


#include<iostream>                  //输入输出流头文件
#include<stdio.h>                   //标准输入输出
#include<stdlib.h>
#include<math.h>                    //数学函数
#include<string.h>                  //C语言字符数组的字符串
#include<algorithm>                 //C++标准模板库的函数
#include<map>                       //map映射容器
#include<unordered_map>             //无序的map映射容器
#include<vector>                    //变长数组容器
#include<queue>                     //队列
#include<stack>                     //栈
#include<string>                    //C++string类
#include<set>                       //set集合
using namespace std;                //标准命名空间

                                    //可以加入全局变量或者其他函数

int main(){                         //主函数
#ifdef ONLINE_JUDGE                 //如果有oj系统(在线判定),则忽略文件读入,否则使用文件作为标准输入
#else
    freopen("1.txt", "r", stdin);   //从1.txt输入数据
#endif

    string a , str , ans;
    getline(cin , a);
	cin >> str;
	//cout <<  a << str << endl;
	bool judge = false;
	if(a.find('+') != string::npos){
		judge = true;
	} 
	for(int i = 0 ; i < str.length() ; i++){
		if(a.find(toupper(str[i])) != string::npos){
			continue;
		}
		if(isupper(str[i]) && judge){
			continue;
		}
		cout << str[i];
	}

    return 0;                       
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值