题目要求如下:

  我一开始理解的题意:第一行给出的是坏掉的键,这里的规则应该是这样的:

  1.“对应英文字母的坏键以大写给出”,若有字母,则与其相关的字母全部不能输出,不论是大写还是小写;

  2.若出现“,”“.”“-”,则不能输出这三样(注意这里的逗号是全角或者是半角,为了防止出错最好直接复制到程序中)

  3.若出现“+”,则不能输出大写字母,但是不影响“+”本身的输出

  4.若出现“_”,则不能输出空格(即“ ”)

  这道题我们可以使用哈希表来做,使用getline来快速读取两个字符串,根据第一个字符串的内容,分别对128个ASCII码的哈希表其中涉及到的码赋正值,然后根据哈希表的值输出第二行;若没有能输出的字符,则输出换行。

  这样编写完程序之后,发现无论如何调整都有一个得分点无法通过,经我的npy和zju群里的兄弟指点之后发现了错误所在:

前面的第四条,题目中说的是



  因此这两个串中是不会出现真正的空格的,而是以下划线本身代替,即下划线就是空格的化身(az)。

  调整后完全正确的程序如下所示:

#include<bits/stdc++.h>
using namespace std;
bool HashTable[256] = {false};
int main(){
string s1, s2;
getline(cin, s1);
getline(cin, s2);
int len1 = s1.length(), len2 = s2.length();
int flag = 0;
for(int i = 0; i < len1; i++){
if(s1[i] == '+'){
for(int j = 65; j <= 90; j++){
HashTable[j] = true;
}
//HashTable[43] = true;//这是我误以为不能输出+的地方
}else if(s1[i] == '_'){
//HashTable[32] = true;//这里就是我写错的地方
HashTable[95] = true;
}else if(s1[i] >= 65 && s1[i] <= 90){
HashTable[s1[i] + 32] = true;
HashTable[s1[i]] = true;
}else{
HashTable[s1[i]] = true;
}
} for(int i = 0; i < len2; i++){
if(HashTable[s2[i]] == false){
printf("%c", s2[i]);
flag++;
}
} if(flag == 0){
printf("\n");
} return 0;
}

  为表示感谢,再次贴上zju群里阿萨姆同学的代码,他的要简洁一些:

#include<iostream>
#include<cstring>
using namespace std;
int hashT[130];//防止不必要的溢出错误
int main()
{
string a,b;
getline(cin,a);
getline(cin,b);
for(int i=0;i<a.length();i++){
hashT[(int)a[i]]=1;
if(a[i]>='A'&&a[i]<='Z')hashT[(int)a[i]+32]=1;
if(a[i]=='+')memset(hashT+65,1,26*sizeof(int));//使用memset更快一点
}
for(int i=0;i<b.length();i++)if(!hashT[(int)b[i]])cout<<b[i];
cout<<endl;
return 0;
}

  最后给大家推荐一个方便别人修改你的代码的网站:

https://paste.ubuntu.com/

  使用方法如下:



  大家明天见!

Day 004:PAT练习--1033 旧键盘打字 (20 分)的更多相关文章

  1. PAT Basic 1033 旧键盘打字 (20 分)

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

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

    1033. 旧键盘打字(20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 旧键盘上坏了几个键,于是在敲一段文 ...

  3. PAT (Basic Level) Practice (中文)1033 旧键盘打字 (20 分)

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

  4. 1033 旧键盘打字 (20 分)C语言

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

  5. PAT1033 旧键盘打字 (20分) (关于测试点4超时问题)

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

  6. PAT (Basic Level) Practise (中文)-1033. 旧键盘打字(20)

    PAT (Basic Level) Practise (中文)-1033. 旧键盘打字(20)  http://www.patest.cn/contests/pat-b-practise/1033 旧 ...

  7. PAT 1033 旧键盘打字(20)(20 分)

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

  8. PAT(B) 1033 旧键盘打字(C) 字符

    题目链接:1033 旧键盘打字 (20 point(s)) 题目描述 旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现.现在给出应该输入的一段文字.以及坏掉的那些键,打出的结果文字会是 ...

  9. PAT-乙级-1033. 旧键盘打字(20)

    1033. 旧键盘打字(20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 旧键盘上坏了几个键,于是在敲一段文 ...

随机推荐

  1. 开源电调blheli / blheli_s分析

    一. 启动阶段分析 启动阶段需完成24次换相,超过24次之后进入初始运行阶段,该阶段持续12次换相周期(每个周期6次换相),完成后进入正常运转阶段 二. 换相时间分析 总体思想是根据电机运行状态计算前 ...

  2. systemd --user进程CPU占用高问题分析

    1.问题由来 近期发现堡垒机环境有如下问题,systemd占用大量cpu: 原文链接:https://www.cnblogs.com/yaohong/p/16046670.html 2.问题定位 2. ...

  3. 论文解读(MVGRL)Contrastive Multi-View Representation Learning on Graphs

    Paper Information 论文标题:Contrastive Multi-View Representation Learning on Graphs论文作者:Kaveh Hassani .A ...

  4. Ls 命令执行什么功能?可以带哪些参数,有什么区别?

    ls 执行的功能:列出指定目录中的目录,以及文件 哪些参数以及区别:a 所有文件 l 详细信息,包括大小字节数,可读可写可执行的权限等

  5. switch语句能否作用在byte上,能否作用在long上,能否作用在String上?

    在Java 7以前,在switch(expr1)中,expr1只能是一个整数表达式(但不包括long和Long)或者枚举常量,整数表达式可以是int基本类型或Integer包装类型,byte.shor ...

  6. jQuery--事件案例(鼠标提示)

    1.文字提示 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...

  7. 利用Matlab快速绘制栅格地图

    代码演示 % 基于栅格地图的机器人路径规划算法 % 第1节:利用Matlab快速绘制栅格地图 clc clear close all %% 构建颜色MAP图 cmap = [1 1 1; ... % ...

  8. vim的vimrc配置

    windows "# modified by Neoh set helplang=cn "使用中文帮助文档 set encoding=utf-8 "查看utf-8格式的帮 ...

  9. SQL之总结(一)

    导游通项目之总结SQL 1.选择前面的某几个 oracle:  select * from tb_article where rownum<5 order by article_id       ...

  10. 深入理解ES6之《用模块封装代码》

    什么是模块 模块是自动运行在严格模式下并且没有办法退出运行的Javascript代码 在模块的顶部this的值是undefined 其模块不支持html风格的代码注释除非用default关键字,否则不 ...