【练习】PAT乙1033 旧键盘打字

题目

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

输入格式

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

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

输出格式:

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

输入样例:

7+IE.

7_This_is_a_test.

输出样例:

_hs_s_a_tst

来源:PAT乙1033


思路(注意事项)

  1. 设置两个标志位flag1,flag2.
  • flag1:判断输入的字符串中有没有坏键(不包含是否有上档键的判断)。
  • flag2:判断输入的字符串中,是否有大写英文字母因为有上档键的存在而无法输出。
  • 如果字符对应的键不是坏键(不区分大小写),且上档键不是坏键,则输出字符。
  • 如果字符对应的键不是坏键(不区分大小写),但上档键是坏键,则判断字符是否是大写字母,如果不是大写字母,则输出字符。
  1. 考虑第一个输入的字符串可能会空,即所有按键都没坏的情况。cin读不到空格和回车 ,所以得用getline()函数
  2. tolower()函数: 将大写字母转为小写字母(需引用头文件"cctype")

题解

c 复制代码
#include<iostream>
#include<string>
#include<cctype>
using namespace std;
#define rep(i, a, n) for(int i = a; i < n; i++)
int main()
{
	string str1, str2;
	getline(cin,str1);//输入坏键
	getline(cin,str2);//输入/字符串 
	rep(i, 0, str2.length())//遍历输入的字符串 
	{
		int flag1 = 0, flag2 = 0;
		rep(j, 0, str1.length())//遍历坏键 
		{
			if(tolower(str1[j]) == tolower(str2[i]))//是否是坏键 
			{
				flag1 = 1;
			}
			if(str1[j] == '+' )//是否有上档键坏掉 
				flag2 = 1;
		}
		if(flag1 == 0 && flag2 == 0 || flag1 == 0 && flag2 == 1 &&	(str2[i] > 'Z' || str2[i] < 'A'))
			cout << str2[i];
	}
	cout << endl;
	return 0;
} 
相关推荐
老赵聊算法、大模型备案3 小时前
北京市生成式人工智能服务已备案信息公告(2025年12月11日)
人工智能·算法·安全·aigc
CoderYanger4 小时前
C.滑动窗口-求子数组个数-越长越合法——2799. 统计完全子数组的数目
java·c语言·开发语言·数据结构·算法·leetcode·职场和发展
厕所博士4 小时前
红黑树原理前置理解—— 2-3 树
算法·2-3树·红黑树原理理解前置
萌>__<新5 小时前
力扣打卡每日一题————除自身外所有元素的乘积
数据结构·算法
xu_yule5 小时前
算法基础—搜索(2)【记忆化搜索+BFS+01BFS+Floodfill]
数据结构·算法
s09071365 小时前
Xilinx FPGA使用 FIR IP 核做匹配滤波时如何减少DSP使用量
算法·fpga开发·xilinx·ip core·fir滤波
老马啸西风6 小时前
成熟企业级技术平台-10-跳板机 / 堡垒机(Bastion Host)详解
人工智能·深度学习·算法·职场和发展
子夜江寒6 小时前
逻辑回归简介
算法·机器学习·逻辑回归
软件算法开发6 小时前
基于ACO蚁群优化算法的多车辆含时间窗VRPTW问题求解matlab仿真
算法·matlab·aco·vrptw·蚁群优化·多车辆·时间窗
another heaven6 小时前
【软考 磁盘磁道访问时间】总容量等相关案例题型
linux·网络·算法·磁盘·磁道