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 旧键盘上坏了几个键,于是在敲一段文 ...
 
随机推荐
- @SpringBootApplication注释在内部有什么用处?
			
作为Spring引导文档,@SpringBootApplication注释等同于同时使用@Configuration.@EnableAutoConfiguration和@ComponentScan及其 ...
 - springboot-数据访问之jdbc
			
官网的starthttps://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using-boot-starter 111 ...
 - 学习Kvm(七)
			
六,管理虚拟网络 [x] Linux网桥基本概念 [x] qemu-kvm支持的网络 [x] 向虚拟机添加虚拟网络连接 [x] 基于NAT的虚拟网络 [x] 基于网桥的虚拟网络 [x] 用户自定义的隔 ...
 - MySQL索引机制(详细+原理+解析)
			
MySQL索引机制 永远年轻,永远热泪盈眶 一.索引的类型与常见的操作 前缀索引 MySQL 前缀索引能有效减小索引文件的大小,提高索引的速度.但是前缀索引也有它的坏处:MySQL 不能在 ORDER ...
 - About HTML
			
HTML 简介 HTML 历史 最初的 HTMl 是由 CERN负责制定的,后来转交给 IETF. 在 1990-1995 年期间, HTML 经历了许多次的版本修改与扩充: 1995 年的时候 HT ...
 - 用Node处理文件上传
			
前言 在Web开发中,文件上传是一个非常常见.非常重要的功能.本文将介绍如何用Node处理上传的文件. 需求分析 由于现在前后端分离很流行,那么本文也直接采用前后端分离的做法.前端界面如下: 用户从浏 ...
 - 【Android开发】Coding + git命令行基本使用
			
上传代码 进入本地仓库的目录. cd ... 查看仓库链接 : git remote -v 如果没有,则添加url链接 : git remote add testName https://git.co ...
 - 每天找回一点点之MD5加密算法
			
之前在做项目的时候用户密码都进行了MD5的加密,今天突然想起来了总结一下(●'◡'●) 一.MD5是什么? MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被 ...
 - 新版vue作用域插槽的使用
			
2.6开始,作用域插槽的使用有了不同的地方: 作用域插槽的个人理解就是让子组件的数据可以在父组件中使用: 也是一个数据传递的方式了: 不多说,上代码 子组件定义一个插槽,并且定义一个需要传递到父组件 ...
 - Shiro+springboot+mybatis+EhCache(md5+salt+散列)认证与授权-03
			
从上文:Shiro+springboot+mybatis(md5+salt+散列)认证与授权-02 当每次进行刷新时,都会从数据库重新查询数据进行授权操作,这样无疑给数据库造成很大的压力,所以需要引入 ...