利用常量数组解码的方法

【题目描述】

把手放在键盘上时,稍不注意就会往右错一位。这样,输入Q会变成输入W,输入J会变成输入K等。键盘如图所示。

输入错位后敲出的几行字符串,输出打字员本来想打出的句子。

输入仅包含数字、空格、大写字母或标点符号,不包括带有英文单词的键(Tab, BackSp,Control等)。输入保证合法,即一定是错位之后的字符串,不会出现大写字母Q, A, Z及左上角的反引号“`”。

空格在输出中需正常显示。

注:原题说明有些含糊,上面是老金修改过的。

【样例输入】

O S, GOMR YPFSU/

【样例输出】

I AM FINE TODAY.

【题目来源】

刘汝佳《算法竞赛入门经典  第2版》例题3-2 WERTYU(WERTYU, UVa10082)

【解析】

原书代码:

#include<stdio.h>
char s[] = "`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./";
int main() {
    int i, c;
    while((c = getchar()) != EOF) {
        for (i=1; s[i] && s[i]!=c; i++); //找错位之后的字符在常量表中的位置
        if (s[i]) putchar(s[i-1]); //如果找到,则输出它的前一个字符
        else putchar(c);
    }
    return 0;
}

代码说明:

1.读取函数的选择:如果每输入一个字符,都能通过某种规则直接求出要输出的字符(也就是说输出与输入的单个字符有关,与输入的单词、短语、句子无关),这种情况下用读取单个字符的函数getchar输入是理想的方法。

2.利用常量数组进行输入输出变换:这是本题的核心技巧。字符串本质上就是数组,因而可以利用数组下标建立起字符间的映射关系。因为需要判断的字符比较多,相比if或switch语句利用常量数组能大大减少代码量。而且,其可读性也更高,后续代码维护量也少。

严格来说,常量数组的元素均为常量,是不应被改变的,所以定义时应在类型名前加上const。不过本题重在理解常量数组的使用技巧,而不是讨论其定义,因而加不加无关紧要。

3.查找字符的位置。本题是通过遍历字符串来查找字符的位置的,这个功能也可以用strchr函数实现。该函数定义在 <string.h> 头文件中,strchr(s, c)的功能是在字符串s中查找字符c,如果找到,返回指向首次出现位置的指针。如果未找到,则返回 NULL。注意,它返回的是指向位置的指针,而不是位置的索引(数组下标)。用strchr函数修改的代码如下:

#include<stdio.h>
#include<string.h>
char s[] = "`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./";
int main() {
    int c;
    char *p;
    while((c = getchar()) != EOF) {
        if ((p=strchr(s,c))!= NULL) putchar(*(p-1)); //如果找到,则输出它的前一个字符
        else putchar(c);
    }
    return 0;
}

4.输出单个字符:putchar是一个C标准库函数,用于输出单个字符。与之相关的另一个函数是puts,用于输出一个字符串(在输出字符串后会自动换行)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/554715.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2025中国国际储能大会暨展览会(简称“CIES”)

2025年第十五届中国国际储能大会暨展览会 2025 15th China International Energy StorageConference and Exhibition 时间&#xff1a;2025年3月23-26日 地点&#xff1a;杭州国际博览中心主办单位&#xff1a;中国化学与物理电源行业协会承办单位&#xff1a;中国化学与物理电…

Argo基础课程3-BGC-Argo数据质量控制

数据获取&#xff1a; Coriolis/France: https://data-argo.ifremer.fr/dac/ FNMOC/USA: https://usgodae.org/pub/outgoing/argo/dac/ Real-Time数据 24小时内发布&#xff0c;提交至自动质量控制平台进行标记和调整&#xff0c;“R” Delayed-mode数据 经过仔细浏览时间序列…

【Python初学指南】:从零开始学习Python烟花代码实战案例

1. Python入门基础 Python是一种高级编程语言&#xff0c;具有简单易学、功能强大的特点。通过安装Python环境&#xff0c;我们可以进行第一个Python程序的编写和运行。Python的入门基础对于初学者来说是非常重要的第一步&#xff0c;因为它奠定了后续学习和应用的基础。 在P…

哪种裤子穿起来舒服?夏季舒适透气的男装裤子分享

想必大家都会十分注重自己的外观形象&#xff0c;所以对选择的衣服上有不少要求。但是现在市面上却有很多质量不好的裤子&#xff0c;一些商家为了利润而使用一些舒适性差的面料。 那到底裤子哪个品牌的质量比较好&#xff1f;作为一名服装测评师&#xff0c;这些年测评过的品牌…

open Gauss 数据库-05 openGauss数据库备份恢复指导手册

发文章是为了证明自己真的掌握了一个知识&#xff0c;同时给他人带来帮助&#xff0c;如有问题&#xff0c;欢迎指正&#xff0c;祝大家万事胜意&#xff01; 目录 前言 openGauss数据库备份恢复 1 实验介绍 1.1 关于本实验 1.2 实验目的 2 实验前提 3 物理备份和恢复…

json diff patch

文件和图片的比对靠字符串 目录 流程 安装 效果 使用 自适应 数组&#xff1a;最长公共子序列(LCS) 数组中的对象&#xff0c;给定id&#xff0c;类似dom tree的比较 流程 安装 npm install jsondiffpatch import * as jsondiffpatch from jsondiffpatch; const jsond…

中电金信:夯实云原生时代的系统韧性建设——中电金信混沌工程金融业实践

IT系统建设在经历过单机、集中、分布式的演变历程后&#xff0c;系统运维演练、故障模拟测试的复杂度也不断提高。在复杂的分布式系统中&#xff0c;基础设施、应用平台都可能产生不可预知的故障&#xff0c;在不能确知故障根源的情况下&#xff0c;我们无法阻止故障的发生。更…

Transform结构

面试者经常会问transform这个模型&#xff0c;一个典型的seq2seq结构。 1 背景 试问几个问题&#xff0c;为什么提出了transform模型。RNN对于长时间序列&#xff08;超过40&#xff09;压缩到一个上下文向量中出现记忆退化现象&#xff0c;无法更好捕捉上下文信息。因此trans…

C语言知识(1) static修饰详解分享

1.前言 哈喽大家好啊&#xff0c;今天来给大家分享c中static的使用&#xff0c;希望能对大家有所帮助&#xff0c;请大家多多点赞&#xff0c;收藏支持我哦~ 2.正文 在讲解static之前&#xff0c;先给大家铺垫三个概念&#xff0c;方便大家理解。 2.1三则知识铺垫 2.1.1作…

写了一个 SRE 调试工具,类似一个小木马

远程操作机器有时会比较麻烦&#xff0c;我写了一个工具&#xff0c;主要功能&#xff1a;1.远程执行命令 2.上传下载文件。是一个 Web Server&#xff0c;通过 HTTP 请求来操作机器&#xff0c;类似一个小木马。当然&#xff0c;因为是一个 Web Server&#xff0c;所以也提供了…

批量人脸画口罩

网上参考的修改了一下&#xff0c;图片放在根目录&#xff0c;命名叫做1.png&#xff0c;批量人脸画口罩 这个程序的目的是为了解决人脸数据集中的特征点缺失的不足 # -*- coding: utf-8 -*- import os import numpy as np from PIL import Image, ImageFile__version__ 0.3…

短视频矩阵源头====技术文档交付

短视频矩阵源头技术文档交付 搭建短视频矩阵系统源码需要以下步骤&#xff1a; 1. 确定系统需求和功能&#xff1a;明确系统需要支持哪些功能&#xff0c;例如短视频的上传、存储、播放、分享、评论、点赞等。 2. 选择合适的编程语言和框架&#xff1a;根据需求选择合适的编程…

【python】描述性统计计算偏斜度和峭度

文章目录 1.编写计算偏斜度和峭度的函数。并用自己编写的函数计算课本23页的习题1.5数据的偏斜度和峭度。2.从1.5数据中随机抽取2个容量为20的样本&#xff0c;分别计算它们的平均数和标准差3.请绘制给定数据的频率分布直方图&#xff0c;计算数据的均值、标准差、偏斜度和峭度…

IDP之Backstage - 环境搭建

0. 目录 1. 前言2. 环境准备&#xff08;Windows10下&#xff09;2.1 安装nvm2.2 git和docker安装 3. 创建模板项目3.1 典型错误: fails on the yarn install step3.2 再次启动3.3 验证 4. 相关 1. 前言 本不想写这篇&#xff0c;因为看着官网文档写着挺简单的&#xff0c;但实…

【C语言】多字节字符、宽字符(涉及字符集和编码)

字符集、编码&#xff1a; 字符集&#xff1a;一个系统支持的所有抽象字符的集合。字符是各种文字和符号的总称&#xff0c;包括各国家文字、标点符号、图形符号、数字等。例如&#xff1a;ASCII、Unicode、GB2312、GBK、GB18030、BIG5(繁体中文) ... 编码方式&#xff1a;符号…

半导体厂商

引言&#xff1a; 学习了这么久了&#xff0c; 突然发现对某些陌生类型的单片机的历史、公司、不是很了解&#xff0c; 很多只是听说过&#xff0c; 本文的分享就是为了解决关于上述疑问的。 目录 C51 STM32 AVR PIC NXP&#xff08;恩智浦&#xff09; Infineon (英飞凌…

2024新手做电商——哪个平台开店更好做?多平台对比分析!

哈喽~我是电商月月 随着互联网的发展&#xff0c;线下创业越来越不好做 相对于其他创业项目来说&#xff0c;电商的门槛还相对低一点&#xff0c;所以一大批人创业的选择&#xff0c;就看向了电商行业 但准备开店的新手朋友纠结了&#xff1a;自己没有基础&#xff0c;选择哪…

Java面试:MySQL面试题汇总

1.说一下 MySQL 执行一条查询语句的内部执行过程&#xff1f; 答&#xff1a;MySQL 执行一条查询的流程如下&#xff1a; 客户端先通过连接器连接到 MySQL 服务器&#xff1b;连接器权限验证通过之后&#xff0c;先查询是否有查询缓存&#xff0c;如果有缓存&#xff08;之前…

中海达亮相全国地灾防治成果交流会, 硬核产品引关注

4月17日-18日&#xff0c;全国地质灾害防治新方法新技术新设备成果交流会在云南昆明召开。本次活动主题为“提升地质灾害防治能力&#xff0c;服务保障高质量发展”&#xff0c;由中国地质灾害防治与生态修复协会举办&#xff0c;来自业务主管部门、行业协会及相关企业等800多名…

JS-33-jQuery02-选择器

一、单个选择器 选择器是jQuery的核心。 一个选择器写出来类似$(#dom-id)。 美元符号定义 jQuery 为什么jQuery要发明选择器&#xff1f;回顾一下DOM操作中我们经常使用的代码&#xff1a; // 按ID查找&#xff1a; var a document.getElementById(dom-id);// 按tag查找&am…