目录

  • PAT刷题之乙级1033(cpp)
    • 题目描述
      • 输入格式
      • 输出格式
      • 输入样例
      • 输出样例
    • 问题分析
    • 代码实现
    • 运行实现

PAT刷题之乙级1033(cpp)

题目描述

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

输入格式

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

输出格式

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

输入样例

7+IE.
7_This_is_a_test.

输出样例

_hs_s_a_tst

问题分析

这题我想到了两种方法,一种是定义ASCII码值的数组,使用散列的方式来实现,一种是定义两个string字符串用来存放坏键和输入字符,然后用查找标记的方式来实现。(嘿(* ^ ▽ ^ *)嘿,我承认我想到的是第二种那个笨办法,第一种是我百度了一篇看来的)。
       现在先不说两种方法的具体细节,先讨论一下这个题目的几个关键要点。
       ① 要注意在有+和没有+时,英文字符的处理方式是不同的
       ② 第一行输入,也即坏键有可能是没有的,如果没有注意这点2号测试点会报错的
       ③如果字符全都坏了的话,要输出回车
       接下来我们来讨论讨论上面说的两种方法:
第一种: 定义一个int数组,大小为130(根据题目里定义的字符,这么大就够用了),然后根据读入坏键的ASCII码值作为索引,将该索引的数组元素值设为1。如果输入的坏键里有+,那需要将所有大写字母全部设为1,如果输入的坏键里没有+,只需要将字母坏键的大小写设为1即可。然后将输入字符中对应的数组值不是1的输出即可。
第二种: 定义一个坏键字符串str1和一个输入字符串str2,如果str1里有+,那么需要将str2中全部大写字符改为星号(或者其他题目定义中未出现过的字符),如果str1里没有+,就无需特殊处理。
       那么处理手法来了(以下坏键默认无+):
       1、如果坏键字符串中有字母,那么将该字母的大小写全部改为某个标记
       2、如果坏键字符串中有数字或者其他字符,那么将该字符改为某个标记
(偷偷说一句,实践证明第一种要比第二种效率高不少,特别是在数量比较大的时候,我太菜了┭┮﹏┭┮

代码实现

核心代码如下:

第一种:

#include<stdio.h>
#include<string.h>
int main()
{int key[178]={0};//储存坏键int i,check=0;//check核对是否有输出char ch;while((ch=getchar())!='\n'){if(ch>='A'&&ch<='Z')key[ch-'A'+'a']=1;//字母大小写都存入key[ch]=1;}if(key['+'])for(i='A';i<='Z';i++)key[i]=1;//上档键坏掉,则所有大写无法打出while((ch=getchar())!='\n'){if(key[ch])continue;printf("%c",ch);check=1;}if(check==0)printf("\n");//如果没有输出,则输出\n
}
---------------------
原文:https://blog.csdn.net/gl486546/article/details/52387796

第二种:

    string errorKey, inKey;//errorKey为存储坏键字符的字符串,inKey为存储输入字符char ch1;while ((ch1 = getchar()) != '\n')  //之所以这样输入是因为,errorKey有可能为空errorKey=errorKey+ch1;cin >> inKey;unsigned int length2 = inKey.length();unsigned int length1 = errorKey.length();int pos = errorKey.find('+');  //查找+位置int count = 0;for (unsigned int i = 0; i < length2; i++) { //对输入字符进行处理(还可以继续剪枝)char ch = inKey[i];if (isalpha(inKey[i])) {   //处理字母字符if (pos != errorKey.npos) {  //如果有+if (isupper(ch))   //将大写替换为*replacestr(ch, '*', inKey);else {     //将小写替换为*ch = toupper(ch);if (iserror(ch, errorKey)) {  //iserror函数为查找当前输入字符是否为坏键ch = tolower(ch);replacestr(ch, '*', inKey);}}}else {//没有+,将大小写全部替换为*ch = toupper(ch);if (iserror(ch, errorKey)) {replacestr(ch, '*', inKey);ch = tolower(ch);replacestr(ch, '*', inKey);}}}else { //其他字符处理if (iserror(ch, errorKey)) {replacestr(ch, '*', inKey);}}}

完整代码实现如下:

第一种:代码在这里鸭:https://blog.csdn.net/gl486546/article/details/52387796
       第二种:代码在这里鸭~

运行实现

第一种:

第二种:

PAT刷题之乙级1033 旧键盘打字相关推荐

  1. PAT乙级(1033 旧键盘打字)

    PAT乙级 1033旧键盘打字 题目描述 解题代码 输入格式: 输入在 2 行中分别给出坏掉的那些键.以及应该输入的文字.其中对应英文字母的坏键以大写给出:每段文字是不超过 10​5​​ 个字符的串. ...

  2. PAT乙级 1033 旧键盘打字 (20 分)

    1033 旧键盘打字 (20 分) 旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现.现在给出应该输入的一段文字.以及坏掉的那些键,打出的结果文字会是怎样? 原题链接 代码 #incl ...

  3. C++学习之路 | PTA乙级—— 1033 旧键盘打字 (20 分)(精简)

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

  4. pat 乙级 1033 旧键盘打字(C++)

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

  5. pat 乙级1033 旧键盘打字(20)

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

  6. [PAT乙级]1033 旧键盘打字(getline()读入)

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

  7. PAT乙级--1033 旧键盘打字(测试点2,测试点4解决)

    题目描述 旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现.现在给出应该输入的一段文字.以及坏掉的那些键,打出的结果文字会是怎样? 输入格式: 输入在 2 行中分别给出坏掉的那些键.以 ...

  8. PAT 乙级 1033 旧键盘打字 python

    题目 思路 因为坏键盘的输入是大写字母 遍历输入的字符,将输入字母的字符转换为大写 与坏键盘对比: 如果'+' 坏掉, 当字母字符不在坏键盘之列,则是小写时,字符才能输出 代码 import sys ...

  9. PAT乙级1033 旧键盘打字

    这里用cin有一个点过不了,改用getline就没问题了.原因似乎是坏掉的键数有可能为0. #include <iostream> #include <string> #inc ...

最新文章

  1. SAP PP使用ECR去修改BOM主数据
  2. 安装和使用花生壳(linux)
  3. 欠采样(undersampling)和过采样(oversampling)会对模型带来怎样的影响
  4. 安装最新版git,git升级
  5. 2017-2018-2点集拓扑
  6. 项目管理一般知识:项目的组织方式
  7. Android应用程序请求SurfaceFlinger服务创建Surface的过程分析
  8. 《掌握需求过程》阅读笔记05
  9. dell服务器r730老自动重启_Dell R730服务器安装windows server 2008 R2蓝屏问题
  10. TCP长连接开发相关,调试工具SocketTool与框架GatewayWorker
  11. AD9如何设置原点位置
  12. 假设一张纸足够大并且可以无限折叠,假设一张纸足够大并且可以无限折叠,一张纸的厚度是0.5mm,那么这张纸折叠多少次可以到达珠穆朗玛峰的高度8848.43m。
  13. 带库的pydroid安装与使用。
  14. 移动开发唱衰,iOS开发者如何涅槃重生?
  15. TM4C123G学习记录(6)--UART
  16. 7-2 两个巨大素数(质数)的乘积 (10分)
  17. ESSENTIAL C++ 读书笔记
  18. 2023年pmp的考试时间是什么时候?
  19. 整个ztree树下控制其单选
  20. 【游戏合集】手机都要被塞爆了,6款优质Pygame游戏合集降临~(附源码)

热门文章

  1. 类(课堂作业参考答案)
  2. 省市区下单菜单js插件使用教程
  3. Java报时用什么制作_简单实现一个整点报时的软件
  4. V4L2(三)编写虚拟摄像头驱动
  5. SQL Server性能优化与管理的艺术 附件下载地址
  6. 【原创】计算机系的女生你伤不起 咆哮体!!!!!!
  7. 程序员这个冷冬怎么过?!
  8. 零跑股价被普遍看好,零跑汽车今年迎来大发展
  9. html实现自动手动广告轮播,HTML+CSS+jQuery实现轮播广告图
  10. 2021-12-15 《聪明的投资者》学习笔记-12.对每股收益的思考--影响每股收益的6个因素