HJ29 字符串加解密

提示:文章

文章目录

  • 前言
  • 一、背景
  • 二、
    • 2.1
    • 2.2
  • 总结

前言

前期疑问:
本文目标:


一、背景

最近

# 二、HJ29 字符串加解密

2.1 题目 对输入的字符串进行加解密,并输出。

加密方法为:

当内容是英文字母时则用该英文字母的后一个字母替换,同时字母变换大小写,如字母a时则替换为B;字母Z时则替换为a;

当内容是数字时则把该数字加1,如0替换1,1替换2,9替换0;

其他字符不做变化。

解密方法为加密的逆过程。

数据范围:输入的两个字符串长度满足 1 \le n \le 1000 \1≤n≤1000 ,保证输入的字符串都是只由大小写字母或者数字组成

输入描述:

第一行输入一串要加密的密码
第二行输入一串加过密的密码

输出描述:

第一行输出加密后的字符
第二行输出解密后的字符

示例1

输入:

abcdefg
BCDEFGH

复制

输出:

BCDEFGH
abcdefg

2.2代码

2.2.1 第一版有错误版

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <assert.h>
#include <stdbool.h>#define STR_ARRAY_LEN 1001void encodeStr(char* str)
{int len = strlen(str);for(int i = 0; i < len; i++){if(isalpha(str[i])){if(str[i] == 'z'){str[i] = 'a';str[i] = toupper(str[i]);}else{str[i] = toupper(str[i] + 1);}}else if(isdigit(str[i])){if(str[i] == '9'){str[i] = '0';}else{str[i] = str[i] + 1;}}else{printf("input error!");assert(true);}}
}void decode(char* str)
{int len = strlen(str);for(int i = 0; i < len; i++){if(isalpha(str[i])){if(str[i] == 'A'){str[i] = 'Z';str[i] = tolower(str[i]);}else{str[i] = tolower(str[i] - 1);}}else if(isdigit(str[i])){if(str[i] == '9'){str[i] = '0';}else{str[i] = str[i] - 1;}}else{printf("input error!");assert(true);}}
}int main()
{char str[1001] = {'\0'};while(fgets(str, STR_ARRAY_LEN, stdin) != NULL){strtok(str, "\n");encodeStr(str);printf(str);printf("\n");fgets(str, STR_ARRAY_LEN, stdin);strtok(str, "\n");decode(str);printf(str);printf("\n");}return 0;
}

用例输入

2OA92AptLq5G1lW8564qC4nKMjv8C
B5WWIj56vu72GzRja7j5

预期输出

3pb03bQUmR6h2Mx9675Rd5OlnKW9d
a4vvhI45UT61fYqIZ6I4

实际输出

3PB03BQUMR6H2MX9675RD5OLNKW9D
a6vvhi67ut83fyqi`8i6

2.2.2

修改版

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <assert.h>
#include <stdbool.h>#define STR_ARRAY_LEN 1001bool isUpperDigit(char c)
{if(c >= 'A' && c <= 'Z'){return true;}return false;
}void alphaTransOfEncode(char* c)
{if(isUpperDigit(*c)){if(*c == 'Z'){*c = 'A';*c = tolower(*c);}else{*c = tolower(*c + 1);}}else{if(*c == 'z'){*c = 'a';*c = toupper(*c);}else{*c = toupper(*c + 1);}}
}void alphaTransOfDecode(char *c)
{if(isUpperDigit(*c)){if(*c == 'A'){*c = 'Z';*c = tolower(*c);}else{*c = tolower(*c - 1);}}else{if(*c == 'a'){*c = 'z';*c = toupper(*c);}else{*c = toupper(*c - 1);}}
}void DigitTransOfEncode(char* d)
{if(*d == '9'){*d = '0';}else{*d = *d + 1;}
}void DigitTransOfDecode(char* d)
{if(*d == '0'){*d = '9';}else{*d = *d - 1;}
}void encodeStr(char* str)
{int len = strlen(str);for(int i = 0; i < len; i++){if(isalpha(str[i])){alphaTransOfEncode(&str[i]);}else if(isdigit(str[i])){DigitTransOfEncode(&str[i]);}else{printf("input error!");assert(true);}}
}void decode(char* str)
{int len = strlen(str);for(int i = 0; i < len; i++){if(isalpha(str[i])){alphaTransOfDecode(&str[i]);}else if(isdigit(str[i])){DigitTransOfDecode(&str[i]);}else{printf("input error!");assert(true);}}
}int main()
{char str[1001] = {'\0'};while(fgets(str, STR_ARRAY_LEN, stdin) != NULL){strtok(str, "\n");encodeStr(str);printf(str);printf("\n");fgets(str, STR_ARRAY_LEN, stdin);strtok(str, "\n");decode(str);printf(str);printf("\n");}return 0;
}

这一版ac了,也是调试了好几次,主要是细节处理比较多

##2.3 报错

Equality comparison result unused (fix available)

百度解释:编译器在进行等式比较时,比较的结果没有被使用

这是因为在写赋值语句的时候,将赋值符号写成了等于判断符号。

如下代码

void encodeStr(char* str)
{int len = strlen(str);for(int i = 0; i < len; i++){if(isalpha(str[i])){if(str[i] == 'z'){str[i] == 'a';str[i] = toupper(str[i]);}else{str[i] = toupper(str[i] + 1);}}else if(isdigit(str[i])){if(str[i] == '9'){str[i] == '0';}else{str[i] = str[i] + 1;}}else{printf("input error!");assert(true);}}
}

三、

3.1


总结

未完待续

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于ssm的大学生租房平台的设计与实现(java源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的大学生租房平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 大学生租房平台的设计与实现的主…

架构设计参考项目系列主题:新零售SaaS架构:客户管理系统架构设计

什么是客户管理系统? 客户管理系统,也称为CRM(Customer Relationship Management),主要目标是建立、发展和维护好客户关系。 CRM系统围绕客户全生命周期的管理,吸引和留存客户,实现缩短销售周期、降低销售成本、增加销售收入的目的,从而提高企业的盈利能力和竞争力。 …

linux——Bash特性

bash是一个命令解释器&#xff0c;其支持命令行展开&#xff5b;&#xff5d;写法 alias是命令别称&#xff0c;即为命令等同于&#xff0c;使用unalias对应命令可以取消该别称 alias可以对命令进行更改

紫光展锐T610平台_4G安卓核心板方案定制开发

紫光展锐T610核心板配备Android 11操作系统&#xff0c;采用12nm制程工艺。该处理器CPU由2颗基于Cortex-A75架构的大核心和6颗基于Cortex-A55架构的小核心组成&#xff0c;最高主频为1.8GHz。GPU采用的是614.4MHz的Mali G52&#xff0c;可以流畅播放2400*1080分辨率视频&#x…

淘宝批量采集商品详情数据(属性丨详情图丨sku丨价格等)

淘宝批量采集商品详情数据&#xff08;包括属性、详情图、SKU、价格等&#xff09;可以通过以下几种方式实现&#xff1a; 使用淘宝数据抓取工具&#xff1a;这类工具&#xff0c;如某鱼等&#xff0c;能够自动化采集淘宝商品数据&#xff0c;并将其转换成CSV、Excel等格式&am…

【C++ 学习】 priority_queue 优先队列的学习!!

1 queue****的介绍** 队列是一种容器适配器&#xff0c;专门用于在FIFO上下文(先进先出)中操作&#xff0c;其中从容器一端插入元素&#xff0c;另一端提取元素。 队列作为容器适配器实现&#xff0c;容器适配器即将特定容器类封装作为其底层容器类&#xff0c;queue提供一组特…

select、poll、epoll

select, poll 和 epoll 都是用于 I/O 多路复用的机制&#xff0c;允许一个进程监视多个文件描述符的状态变化。它们在 Linux 系统中都是常见的用于网络编程的工具&#xff0c;但是它们有一些区别&#xff1a; select: select 是最古老的一种 I/O 多路复用机制&#xff0c;最早…

DVWA -File Upload-通关教程-完结

DVWA -File Upload-通关教程-完结 文章目录 DVWA -File Upload-通关教程-完结页面功能LowMediumHighImpossible 页面功能 此页面的功能为选择某个图片文件点击Upload按钮上传&#xff0c;上传成功后得知文件上传路径为DVWA\hackable\uploads。 Low 源码审计 这段 PHP 代码…

[面向对象] 单例模式与工厂模式

单例模式 是一种创建模式&#xff0c;保证一个类只有一个实例&#xff0c;且提供访问实例的全局节点。 工厂模式 面向对象其中的三大原则&#xff1a; 单一职责&#xff1a;一个类只有一个职责&#xff08;Game类负责什么时候创建英雄机&#xff0c;而不需要知道创建英雄机要…

《前端面试题》- JS基础 - 防抖和节流

在界面触发点击&#xff0c;滚动&#xff0c;输入校验等事件时&#xff0c;如果对事件的触发频率不加以限制&#xff0c;会给浏览器增加负担&#xff0c;且对用户不友好。防抖和节流就是针对类似情况的解决方案。 防抖 防抖(debounce)&#xff1a;当连续触发事件时&#xff0…

【AIGC】本地部署通义千问 1.5 (PyTorch)

今天想分享一下 Qwen 1.5 官方用例的二次封装&#xff08; huggingface 说明页也有提供源码&#xff09;&#xff0c;其实没有太多的技术含量。主要是想记录一下如何从零开始在不使用第三方工具的前提下&#xff0c;以纯代码的方式本地部署一套大模型&#xff0c;相信这对于技术…

两步解决 Flutter Your project requires a newer version of the Kotlin Gradle plugin

在开发Flutter项目的时候,遇到这个问题Flutter Your project requires a newer version of the Kotlin Gradle plugin 解决方案分两步: 1、在android/build.gradle里配置最新版本的kotlin 根据提示的kotlin官方网站搜到了Kotlin的最新版本是1.9.23,如下图所示: 同时在Ko…

【软考中级】软件设计师考点分布

文章目录 软考官网资格设置软考报考流程 【软件设计师】考点分布选择题考点分布案例题考点分布 软考官网 中国计算机技术职业资格网&#xff1a;https://www.ruankao.org.cn/ 官网报名平台&#xff1a;https://bm.ruankao.org.cn/sign/welcome 资格设置 计算机软件计算机网…

ssh运行base64编码的命令

ssh运行base64编码的命令 目的&#xff1a;在windows上通过ssh在远程主机执行一段非常复杂的shell指令&#xff0c;因此提前将指令编码为base64防止命令中的特殊字符干扰执行。 命令&#xff1a; start "title" "%COMSPEC%" /c ssh -t -p server_port u…

全栈的自我修养 ———— 如何发布一个npm包?

创建本地仓库 npm init在此期间会让你添加一些版本信息和名称 登陆npm npm login ——> yinhaodada arx.040208发布 npm publish查询

ELK 日志分析系统(一)

一、概念 二、详解 2.1 Elasticsearch 核心概念 2.1.1 接近实时(NRT) 2.1.2 cluster集群 2.1.3 Node节点 2.1.4 index索引 2.1.5 类型&#xff08;type&#xff09; 2.1.6 文档&#xff08;document) 2.1.7 分片和副本(shards & replicas) 2.2 Logstash主要组件 …

OpenHarmony开源三方库的cmake在IDE上直接引用的问题

前言 DevEco Studio的native工程的C/C部分当前只支持cmake脚本的编译&#xff0c;工程的目录结构如下图所示 在工程中引用第三方库有如下三种方式&#xff0c; 一、find_package模式 通过find_package&#xff0c;可以在指定目录下去搜索已安装的库&#xff08;三方库构建完后…

【cmake安装】研发环境搭建之cmake安装

背景 因为项目需求&#xff0c;需要家里的Win10 PC安装Ubuntu 20.04虚拟机并搭建编译环境&#xff0c;需要安装cmake编译环境 直接命令安装即可 sudo apt install cmake安装成功后&#xff1a; 3.16版本暂时也够用了

编写Markdown时如何爽爽地渲染树?

在使用VitePress/Dumi等静态网站生成时&#xff0c;一般均支持直接在Markdown中渲染显示Vue/React组件&#xff0c;这给个网站非常丰富极致的表现力&#xff0c;我们在创建静态网站时开心的使用各种Vue/React组件&#xff0c;但是在输出树结构时&#xff0c;实际场景中存在几个…

pyqt写个星三角降压启动方式2

星三角降压启动用可以用类进行封装&#xff0c;就像博图FB块那样。把逻辑都在类里完成&#xff0c;和外界需要交互的暴露出接口。测试过程中&#xff0c;发现类中直接用定时器QTimer会出现问题。然后就把定时器放到外面了。然后测试功能正常。 from PySide6.QtWidgets import …