[PAT乙级] 1029 旧键盘 C++实现

这篇具有很好参考价值的文章主要介绍了[PAT乙级] 1029 旧键盘 C++实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目描述:

旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。

输入格式:

输入在 2 行中分别给出应该输入的文字、以及实际被输入的文字。每段文字是不超过 80 个字符的串,由字母 A-Z(包括大、小写)、数字 0-9、以及下划线 _(代表空格)组成。题目保证 2 个字符串均非空。

输出格式:

按照发现顺序,在一行中输出坏掉的键。其中英文字母只输出大写,每个坏键只输出一次。题目保证至少有 1 个坏键。

输入样例:

7_This_is_a_test
_hs_s_a_es

输出样例:

7TI

限制条件:

代码长度限制                                                                                                                       16 KB

时间限制                                                                                                                             200 ms

内存限制                                                                                                                               64 MB

解题思路:

本题主要是查找那些在“应该输入的文字”的字符串中出现,但是在“实际被输入的文字”的字符串中未出现的字符,并且题目要求英文字母的大小写形式一律按照大写形式输出,且不能重复输出。

本题可以归纳出三个关键问题:1.使用什么样的数据结构来存储“实际被输入的文字”的字符串的字符,从而便于对比发现本应出现但没有出现的字符;2.如何将需要输出的字符的大小写统一转换为大写形式;3.对于重复确实的字符,输出的时候如何去重。

针对问题1:这里使用map形式来实现,定义了一个maps,比用数组实现查询会方便许多;

针对问题2:可以在存储“实际被输入的文字”的字符串的字符时,无论大小写,统一存储英文字母的大写形式,其他形式的字符不变;

针对问题3:在查询、保存本应出现但没有出现的字符时,将已经确认为缺失的字符也存入maps中,但是做出特殊标记。再查询其他字符时,如果可以在maps中找到,再判断是否为标记过的,如果是标记过的,直接continue;如果在maps中找不到,这就是想要的答案。

源代码:

#include <iostream>
#include<map>
using namespace std;

string findBadKey() {
    string a, b, res="";
    cin >> a;
    cin >> b;
    map<char, int> maps;
    for (int i = 0; i < b.size(); i++) {
        if (b[i] - 'a' >= 0 && b[i] - 'a' <= 25) {//小写字母,转换成大写的形式,再存储到maps中
            b[i] = (char)(b[i] - 32);
        }
        if (maps.find(b[i]) == maps.end()) { //如果maps中之前没有存储过这个字符,则添加到maps中
            maps[b[i]] = 1;
        }
    }
    for (int i = 0; i < a.size(); i++) {
        if (a[i] - 'a' >= 0 && a[i] - 'a' <= 25) {//小写字母,转换成大写的形式,再去maps中查找
            a[i] = (char)(a[i] - 32);
        }
        if (maps.find(a[i]) != maps.end() && maps[a[i]] == 2) {//maps中已经存在的字符一种是正常输入的,另一种已经统计过的想要的答案。如果是前者,不用处理;如果是后者,直接continue,防止下一步重复添加
            continue;
        }
        if (maps.find(a[i]) == maps.end()) {//在maps中找不到的字符一定是想要的答案,为了后续的去重也加入到maps中,但是要做出特殊的标记,这里把对应的value设置为2
            maps[a[i]] = 2;
            res = res+a[i];
        }
    }
    return res;
}

int main()
{
    cout << findBadKey() << endl;
    return 0;
}

运行结果截图:

[PAT乙级] 1029 旧键盘 C++实现,PAT,c++,开发语言,算法,PTA文章来源地址https://www.toymoban.com/news/detail-620955.html

到了这里,关于[PAT乙级] 1029 旧键盘 C++实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 菜鸟记录:c语言实现PAT甲级1003--Emergency

    久违的PAT,由于考研408数据结构中有一定需要,同时也是对先前所遗留的竞赛遗憾进行一定弥补 ,再次继续PAT甲级1003.。 As an emergency rescue team leader of a city, you are given a special map of your country. The map shows several scattered cities connected by some roads. Amount of rescue teams in each city and the l

    2023年04月13日
    浏览(30)
  • 菜鸟记录:c语言实现PAT甲级1004--Counting Leaves

    好消息:与上题的Emergency是同样的方法。坏消息:又错了c++真的比c方便太多太多。 A family hierarchy is usually presented by a pedigree tree. Your job is to count those family members who have no child. Each input file contains one test case. Each case starts with a line containing  0 N 100, the number of nodes in a tree, and  M 

    2023年04月17日
    浏览(40)
  • 菜鸟记录:c语言实现PAT甲级1005--Spell It Right

     非常简单的一题了,但还是交了两三次,原因:对数组的理解不足;对数字和字符之间的转换不够敏感。这将在下文中细说。 Given a non-negative integer  N, your task is to compute the sum of all the digits of  N, and output every digit of the sum in English. Each input file contains one test case. Each case occu

    2024年02月01日
    浏览(28)
  • PTA 1015 德才论(C语言实现)

    整体思路: 这个题并非简单的排序,因为涉及到多种分类,所以整体排序的方法不可取,还有排序方法的选择,要选择时间复杂的为(nlogn)的排序方法(因为不会超时),这里我用的是qsort函数(头文件为stdlib.h),读者需要可以自行查询用法,先把几种情况分别用不同的数

    2023年04月09日
    浏览(22)
  • PTA 用C语言实现矩阵转置

    编写函数,求一个3×3矩阵的转置矩阵。 转置矩阵,将原矩阵的行变为列,列变为行。注意,通过指针访问二维数组时的方法。本题采用的是指向数组元素的指针变量。 void Trans(int(*p)[3])函数调用分析: 只有三种情况: i=1,j=0 (1,0)-(0,1) i=2,j=0 (2,0)-(0,2) i=2,j=1 (2,1)

    2024年02月05日
    浏览(33)
  • C语言实现PTA6-3 求集合数据的均方差

    本题希望输入 n (0n=100)个整数,求n个整数的均方差。若将 n个数的平均值记为 Avg,则均方差计算公式为: 函数接口定义: 函数Avg计算并返回数组的平均值;函数StdDev计算并返回n个数据的均方差。 其中  N  和  data  都是用户传入的参数。  N  是要计算的数据个数;  data  

    2024年02月11日
    浏览(23)
  • 机器人寻路算法双向A*(Bidirectional A*)算法的实现C++、Python、Matlab语言

    最近好久没更新,在搞华为的软件挑战赛(软挑),好卷只能说。去年还能混进32强,今年就比较迷糊了,这东西对我来说主要还是看运气,毕竟没有实力哈哈哈。 但是,好歹自己吭哧吭哧搞了两周,也和大家分享一下自己的收获吧,希望能为后来有需要的同学提供一些帮助

    2024年04月13日
    浏览(34)
  • 浙大c语言pat试题汇总

      1-10 7-1 重要的话说三遍 (5 分)    7-1 重要的话说三遍 (5 分)_nklike的博客-CSDN博客 7-2 I Love GPLT (5 分)        7-2 I Love GPLT (5 分)_nklike的博客-CSDN博客 7-3 输出带框文字 (5 分)      7-3 输出带框文字 (5 分)_nklike的博客-CSDN博客 7-4 输出菱形图案 (5 分)      7-4 输出菱形图案 (5 分

    2023年04月09日
    浏览(23)
  • C++实现键盘操控

    C++实现键盘操控 在C++中,我们可以使用一些库和函数来实现键盘的操控。通过使用这些工具,我们可以模拟键盘按键的输入,从而实现对计算机的控制。下面是一个简单的示例,展示了如何在C++中实现键盘操控。 首先,我们需要包含相应的头文件,即 windows.h 。这个头文件提

    2024年02月03日
    浏览(23)
  • 【小沐学C++】C++ 实现鼠标键盘钩子HOOK

    https://learn.microsoft.com/zh-cn/windows/win32/winmsg/about-hooks 挂钩是应用程序截获消息、鼠标操作和击键等事件的机制。 截获特定类型的事件的函数称为 挂钩过程。 挂钩过程可以对其接收的每个事件执行操作,然后修改或放弃该事件。 挂钩是系统消息处理机制中的一个点,其中应用

    2024年02月02日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包