旧键盘打字(PAT)

该博客讨论了一道编程题目,涉及旧键盘上某些键位损坏导致无法正常输入的问题。题目要求根据给定的坏键和应输入的文字,预测实际能打出的文本。解题策略包括创建一个布尔数组记录坏键,遍历输入字符串并根据键的状态决定是否输出字符。源代码使用C++实现,考虑了大写字母需借助上档键的情况。

旧键盘打字(PAT)

题目描述
旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及坏掉的那些键,打出的结果文字会是怎样?
输入描述:
输入在2行中分别给出坏掉的那些键、以及应该输入的文字。其中对应英文字母的坏键以大写给出;每段文字是不超过10^5个字符的串。可用的字符包括字母[a-z, A-Z]、数字0-9、以及下划线“_”(代表空格)、“,”、“.”、“-”、“+”(代表上档键)。题目保证第2行输入的文字串非空。
注意:如果上档键坏掉了,那么大写的英文字母无法被打出。
输出描述:
在一行中输出能够被打出的结果文字。如果没有一个字符能被打出,则输出空行。
输入例子:
7+IE.
7_This_is_a_test.
输出例子:
_hs_s_a_tst
题意:

​  给定两个字符串,分别为串1和串2。依次输出串2字符,需满足凡在串1中出现的字符,均不能输出。且以‘+’代表上档键,若无上档键则不能输出任何大写字母。

解题思路:
  1. 定义一个bool型数组,该数组记载坏掉的键。(因为给定字符的ASCII码在0-256之间,故数组大小开为256即可)
  2. 遍历串1,使用char型字符充当整型下标,统计所有坏掉的键。
  3. 遍历串2,依照题意规定的输出限制,依次按条件判定是否输出当前遍历字符。
  4. 输出换行。(题意规定若没有一个字符能被输出,则输出空行。这里题目判定系统没有卡输出数据了还换行的问题,若有的题目明确指出不能输出,则可定义一个bool型变量,记载判定是否输出数据,随后依据该变量取值选择性输出换行符即可)
源代码:
#include <iostream>
#include <string> 

using namespace std;

const int N = 256;

bool flag[N];			//记载坏掉的键 - 默认false,true为坏掉键 

int main() {
	string Str1;		//坏键  
	cin >> Str1;
	
	//遍历,将坏掉的键进行记载 
	for(int i = 0; i < Str1.size(); i++) {
		//字符char为0-128的整型,因此能够直接当作下标  
		flag[Str1[i]] = true;
	}
	
	string Str2;		//待输出数据
	cin >> Str2;
	
	//遍历string字符串,判断键的好坏并依次输出数据 
	for(int i = 0; i < Str2.size(); i++) {
		//判断类型 - 大写英文字母,需要上档键和对应英文字母键完好 
		if(Str2[i] >= 'A' && Str2[i] <= 'Z') {
			if(!flag['+'] && !flag[Str2[i]]) cout << Str2[i];
		}
		//小写字母,由于坏键存储只存储大写英文字母,所以小写下标需要转为大写下标 
		else if(Str2[i] >= 'a' && Str2[i] <= 'z') {
			if(!flag[Str2[i]-'a'+'A']) cout << Str2[i];
		}
		//其他字符,直接通过下标判断键是否存在即可 
		else if(!flag[Str2[i]]){
			cout << Str2[i];
		}
	}
	
	//若不存在数据,需输出空行
	cout << endl;
	return 0; 
} 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值