首页 > 编程语言 >PAT-basic-1029 旧键盘 java c++

PAT-basic-1029 旧键盘 java c++

时间:2023-04-12 16:44:06浏览次数:36  
标签:map PAT text 1029 c++ char list Character actText

一、题目


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

输入格式:

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

输出格式:

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

输入样例:

7_This_is_a_test
_hs_s_a_es
 

输出样例:

7TI

二、解析


用hashmap来记录应该出现的字符,如果出现了就置1,没有就置0;

实际出现的字符,出现了就置0,不再考虑;

然后遍历hashmap中还是1的字符,将其放入额外的list中,只需要放一次,所以放完就置0;大小写字母也只需要放一个。

最后遍历list中的字符,如果是小写字母,则输出大写字母,其他的照例输出。

三、代码


java ac版:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;

public class Main {
    private static Scanner input = new Scanner(System.in);
    public static void main(String[] args) {
        String text = input.nextLine();
        String actText = input.nextLine();

        //用hashmap来记录应该出现的字符,如果出现了就置1,没有就置0
        HashMap<Character, Boolean> map = new HashMap<>();

        for (int i = 0; i < text.length(); i++) {
            char c = text.charAt(i);
            if(!map.containsKey(c))
                map.put(c, false);
        }
        for (int i = 0; i < actText.length(); i++) {
            char c = actText.charAt(i);
            if(map.containsKey(c))
                map.put(c, true);
        }
        //需要用额外的一个列表来存储坏掉的键,并处理大小写字母,因为大小字母坏了一个,两个都是坏的
        ArrayList<Character> list = new ArrayList<>();
        for (int i = 0; i < text.length(); i++) {
            char c = text.charAt(i);
            if(!map.get(c)){
                if(Character.isAlphabetic(c)){
                    if(list.contains(Character.toLowerCase(c)) || list.contains(Character.toUpperCase(c)))
                        continue;
                }
                list.add(c);
                map.put(c, true);
            }
        }
        for (Character e : list) {
            if(Character.isAlphabetic(e))
                System.out.print(Character.toUpperCase(e));
            else
                System.out.print(e);
        }
    }
}

 

c++ ac版:

//
// Created by dongdong on 2023/4/11.
//
#include <map>
#include <vector>
#include "iostream"
#include "algorithm"
int main(){
    char* text=new char [81];
    char* actText=new char [81];
    scanf("%s %s", text, actText);
//    std::cin>>text>>actText;

    std::map<char, int> map;
    int i=0;
    while(text[i] != '\0'){
        if(map[text[i]] == 0){
            map[text[i]] = 1;
        }
        i++;
    }
    for(int j=0; actText[j] !='\0'; j++){
        if(map[actText[j]] == 1)
            map[actText[j]] = -1;
    }

    std::vector<char> vec;
    for(i=0; text[i] != '\0'; i++){
        char ch = text[i];
        if(map[ch] == 1){
            if((ch >= 'a' && ch <= 'z') || (ch >='A' && ch<='Z')){
                auto item = std::find(vec.begin(), vec.end(), tolower(ch));
                auto item1 = std::find(vec.begin(), vec.end(), toupper(ch));
                if(item != vec.end() || item1 != vec.end()) continue;
            }
            vec.push_back(ch);
            map[ch] = -1;
        }
    }
    for(int i=0; i<vec.size(); i++){
        if(islower(vec[i]))
            printf("%c", toupper(vec[i]));
        else
            printf("%c", vec[i]);
    }
    return 0;
}

 

标签:map,PAT,text,1029,c++,char,list,Character,actText
From: https://www.cnblogs.com/langweixianszu/p/17310320.html

相关文章

  • c++基础 打卡1
    一、面向对象的编程语言有的特点。    ①面向对象的编程语言最大的特点是结构化程序,二结构化程序的设计思路是自顶向下、逐步求精;其程序化结构是按功能划分为若干个基本模块,这些模块形成一个树状结构;各模块之间的关系尽可能简单,在功能上相对独立;每个模块内部均是由顺序、......
  • 开心档之C++ 修饰符类型
    C++修饰符类型C++允许在 char、int和double 数据类型前放置修饰符。修饰符用于改变基本类型的含义,所以它更能满足各种情境的需求。下面列出了数据类型修饰符:signedunsignedlongshort修饰符 signed、unsigned、long和short 可应用于整型,signed 和 unsigned ......
  • c++ 打卡第三天
    2023-04-12百钱百鸡问题一、问题描述。    一只公鸡值五钱,一只母鸡值三钱,三只小鸡值一钱,我可以通过三种鸡各买多少实现100钱买一百只鸡。二、设计思路。    ①通过以上题我们可以确定两个方程式      公鸡数量+母鸡数量+小鸡数量=100。   ......
  • C++教材第二章课后习题 2-27
    用穷举法找出1~100的质数并显示出来,分别用while,do...while,for循环语句实现1#include<iostream>//for循环语句的实现2#include<cmath>3usingnamespacestd;4intmain()5{6inti,k,m;7for(k=2;k<=100;k++)//从2~1......
  • C++第二章课后练习 2-26
    实现一个简单的菜单程序,运行时显示“Menu:A(dd) D(elete)S(ort)Q(ui Select one:”提示用户输入,A表示增加,D表示删除,S表示排序,Q表示退出,输入为A、D、S时分别提示“数据已经增加、删除、排序。”输入为Q时程序结束。(1)要求使用if…else语句进行判断,用break、continue 控制程序流程......
  • PAT Basic 1089. 狼人杀-简单版
    PATBasic1089.狼人杀-简单版1.题目描述:以下文字摘自《灵机一动·好玩的数学》:“狼人杀”游戏分为狼人、好人两大阵营。在一局“狼人杀”游戏中,1号玩家说:“2号是狼人”,2号玩家说:“3号是好人”,3号玩家说:“4号是狼人”,4号玩家说:“5号是好人”,5号玩家说:“4号是好人”......
  • Can't open dsw file in Visual Studio C++ 6.0
    Can'topendswfileinVisualStudioC++6.0 WhenItryto"OpenWorkplace"ofmyproject,visualstudiodoesnothing,solutionexplorerisempty.AlsowhenItrytoopenmyproject,Ioccasionallyseethiserror:Thismakefilewas......
  • PAT Basic 1088. 三人行
    PATBasic1088.三人行1.题目描述:子曰:“三人行,必有我师焉。择其善者而从之,其不善者而改之。”本题给定甲、乙、丙三个人的能力值关系为:甲的能力值确定是2位正整数;把甲的能力值的2个数字调换位置就是乙的能力值;甲乙两人能力差是丙的能力值的X倍;乙的能力值是丙的Y倍。......
  • 【C++】统计文本词频程序
    1#include<iostream>2#include<fstream>3#include<string>4#include<iomanip>5#include<vector>6#include<map>7#include<cctype>8#include<algorithm>9boolcmp(std::pair<std::strin......
  • 网络框架重构之路plain2.0(c++23 without module) 综述
    最近互联网行业一片哀叹,这是受到三年影响的后遗症,许多的公司也未能挺过寒冬,一些外资也开始撤出市场,因此许多的IT从业人员加入失业的行列,而且由于公司较少导致许多人求职进度缓慢,很不幸本人也是其中之一。自从参加工作以来,一直都是忙忙碌碌,开始总认为工作只是为了更好的生活,但是一......