Day 004:PAT练习--1033 旧键盘打字 (20 分)
题目要求如下:

我一开始理解的题意:第一行给出的是坏掉的键,这里的规则应该是这样的:
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 分)的更多相关文章
- PAT Basic 1033 旧键盘打字 (20 分)
旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现.现在给出应该输入的一段文字.以及坏掉的那些键,打出的结果文字会是怎样? 输入格式: 输入在 2 行中分别给出坏掉的那些键.以及应该输入 ...
- PAT乙级 1033. 旧键盘打字(20)
1033. 旧键盘打字(20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 旧键盘上坏了几个键,于是在敲一段文 ...
- PAT (Basic Level) Practice (中文)1033 旧键盘打字 (20 分)
旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现.现在给出应该输入的一段文字.以及坏掉的那些键,打出的结果文字会是怎样? 输入格式: 输入在 2 行中分别给出坏掉的那些键.以及应该输入 ...
- 1033 旧键盘打字 (20 分)C语言
题目描述 旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现.现在给出应该输入的一段文字.以及坏掉的那些键,打出的结果文字会是怎样? 输入描述: 输入在2行中分别给出坏掉的那些键.以及应 ...
- PAT1033 旧键盘打字 (20分) (关于测试点4超时问题)
1033 旧键盘打字 (20分) 旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现.现在给出应该输入的一段文字.以及坏掉的那些键,打出的结果文字会是怎样? 输入格式: 输入在 2 ...
- PAT (Basic Level) Practise (中文)-1033. 旧键盘打字(20)
PAT (Basic Level) Practise (中文)-1033. 旧键盘打字(20) http://www.patest.cn/contests/pat-b-practise/1033 旧 ...
- PAT 1033 旧键盘打字(20)(20 分)
1033 旧键盘打字(20)(20 分) 旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现.现在给出应该输入的一段文字.以及坏掉的那些键,打出的结果文字会是怎样? 输入格式: 输入在2 ...
- PAT(B) 1033 旧键盘打字(C) 字符
题目链接:1033 旧键盘打字 (20 point(s)) 题目描述 旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现.现在给出应该输入的一段文字.以及坏掉的那些键,打出的结果文字会是 ...
- PAT-乙级-1033. 旧键盘打字(20)
1033. 旧键盘打字(20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 旧键盘上坏了几个键,于是在敲一段文 ...
随机推荐
- luoguP6624 [省选联考 2020 A 卷] 作业题(莫比乌斯反演,矩阵树定理)
luoguP6624 [省选联考 2020 A 卷] 作业题(莫比乌斯反演,矩阵树定理) Luogu 题外话: Day2一题没切. 我是傻逼. 题解时间 某种意义上说刻在DNA里的柿子,大概是很多人学 ...
- Apache+tomcat实现应用服务器集群
Ngnix/Apache比较 Nginx:Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行.其特点是占有内存少,并发能力 ...
- 一种优雅的Golang的库插件注册加载机制
一种优雅的Golang的库插件注册加载机制 你好,我是轩脉刃. 最近看到一个内部项目的插件加载机制,非常赞.当然这里说的插件并不是指的golang原生的可以在buildmode中加载指定so文件的那种 ...
- Redis集群节点扩容及其 Redis 哈希槽
Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求 ...
- object 转json 相互转换
1.object 转json 2.json转object 参考 https://blog.csdn.net/justry_deng/article/details/80780175
- java中的四种引用类型
为什么需要引用: Java的内存回收不需要程序员负责,JVM会在必要时启动Java GC完成垃圾回收. Java以便我们控制对象的生存周期,提供给了我们四种引用方式,引用强度从强到弱分别为:强引用.软 ...
- Zookeeper 文件系统 ?
Zookeeper 提供一个多层级的节点命名空间(节点称为 znode).与文件系统不 同的是,这些节点都可以设置关联的数据,而文件系统中只有文件节点可以存放 数据而目录节点不行. Zookeeper ...
- 学习openstack(六)
VIII openstack(1) 传统的数据中心面临的问题:成本.效率(要快).管理方面(物理机.云主机): 云计算:对运维需求总体量是减少了,尤其是硬件工程师,对运维的技术要求提高了: 云计算是个 ...
- 全网最硬核 Java 新内存模型解析与实验单篇版(不断更新QA中)
个人创作公约:本人声明创作的所有文章皆为自己原创,如果有参考任何文章的地方,会标注出来,如果有疏漏,欢迎大家批判.如果大家发现网上有抄袭本文章的,欢迎举报,并且积极向这个 github 仓库 提交 i ...
- 使用 Vuex + Vue.js 构建单页应用
鉴于该篇文章阅读量大,回复的同学也挺多的,特地抽空写了一篇 vue2.0 下的 vuex 使用方法,传送门:使用 Vuex + Vue.js 构建单页应用[新篇] ------------------ ...