当前位置: 首页 > article >正文

华为机试HJ29 字符串加解密

首先看一下题

描述

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

加密方法为:

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

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

其他字符不做变化。

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

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

输入描述:

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

输出描述:

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

示例1

输入:

abcdefg
BCDEFGH

输出:

BCDEFGH
abcdefg

一、问题分析

1.对输入的字符串进行加解密,并输出。

2.加密方法为:

当内容是英文字母时则用该英文字母的后一个字母替换

3.同时字母变换大小写,如字母a时则替换为B

字母Z时则替换为a

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

5.其他字符不做变化。

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

7.数据范围:输入的两个字符串长度满足n大于等于1,小于等于1000,

8.保证输入的字符串都是只由大小写字母或者数字组成

9.输入描述:第一行输入一串要加密的密码

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

10.输出描述:第一行输出加密后的字符

第二行输出解密后的字符

二、解题思路

1.首先我们定义两个字符串用来接收数据char toEncode[1001];

char strtoDecode[1001];

2.然后我们读取数据scanf("%s", toEncode);

scanf("%s", toDecode);

3.我们定义两个正整数用来存储两个字符串的长度

int lenE = strlen(toEncode);

int lenD = strlen(toDecode);

4.我们写两个方法,一个是char *encode(char *e, len);

一个是一个是char *decode(char *d, len);

5.我们定义两个新的字符串char encoded[lenE];char decoded[lenD];用来存储我们整理后的字符串

6.在encode方法中,我们需要对字符串进行加密,

所以for(int i = 0; i < len; i++)我们用for循环遍历字符串e,

如果遇到了字母'z'我们变成‘A’,如果遇到字母‘Z’我们变成‘a’,如果遇到‘9’我们变成0

然后我们判断如果是大写字母isupper,我们先tolower然后+1

如果是小写字母islower我们先toupper然后+1

如果是数字我们+1

然后返回encode之后的字符串

7.在decode方法中,我们需要对字符串进行解密,解密方法是加密方法的逆过程

还是一个for循环

for(int i = 0; i < len; i++)

如果遇到了字母'A',我们变成字母'z',如果遇到了字母‘a’,我们变成字母'Z',如果遇到‘0’我们变成‘9’

然后我们判断,如果是大写字母isupper我们先tolower然后-1

如果是小写字母islower我们先toupper然后-1

如果是数字我们-1

然后返回decode之后的字符串

三、具体步骤

使用的语言是C

#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
char *encode(char *e, int len);
char *decode(char *d, int len);

int main() {
    char toEncode[1001];
    char toDecode[1001];
    scanf("%s", toEncode);
    scanf("%s", toDecode);
    int lenE = strlen(toEncode);
    int lenD = strlen(toDecode);
    char *encoded = (char *)malloc((lenE + 1) * sizeof(char));
    char *decoded = (char *)malloc((lenD + 1) * sizeof(char));
    strcpy(encoded, encode(toEncode, lenE));
    strcpy(decoded, decode(toDecode, lenD));
    printf("%s\n", encoded);
    printf("%s\n", decoded);
}

char *encode(char *e, int len) {
    for(int i = 0; i < len; i++) {
        if(e[i] == 'Z') e[i] = 'a';
        else if(e[i] == 'z') e[i] = 'A';
        else if(e[i] == '9') e[i] = '0';
        else if(isupper(e[i])) e[i] = tolower(e[i]) + 1;
        else if(islower(e[i])) e[i] = toupper(e[i]) + 1;
        else e[i]++;
    }
    return e;
}

char *decode(char *d, int len) {
    for(int i = 0; i < len; i++) {
        if(d[i] == 'a') d[i] = 'Z';
        else if (d[i] == 'A') d[i] = 'z';
        else if (d[i] == '0') d[i] = '9';
        else if (isupper(d[i])) d[i] = tolower(d[i]) - 1;
        else if (islower(d[i])) d[i] = toupper(d[i]) - 1;
        else d[i]--;
    }
    return d;
}

http://www.kler.cn/a/387467.html

相关文章:

  • 对称加密与非对称加密:密码学的基石及 RSA 算法详解
  • Vue 3 中,computed 和 watch的区别
  • turtlesim修改窗口大小;添加自己的小乌龟;
  • LFD STM32编程规范20241111
  • 【NLP】使用 PyTorch 从头构建自己的大型语言模型 (LLM)
  • SPIRE: Semantic Prompt-Driven Image Restoration 论文阅读笔记
  • SDL打开YUV视频
  • AI和大模型技术在网络脆弱性扫描领域的最新进展与未来发展趋势
  • [C++ 核心编程]笔记 4.4.3 成员函数做友元
  • <<零基础C++第一期, C++入门基础>>
  • 打造完整 Transformer 编码器:逐步实现高效深度学习模块
  • 深度学习在大数据处理中的应用
  • 电子电气架构 --- 车载以太网架构安全性要求
  • Qt使用属性树(QtProPertyBrowser)时,引用报错#include “QtTreePropertyBrowser“解决方案
  • HDR视频技术之二:光电转换与 HDR 图像显示
  • python批量合并excel文件
  • 经典的ORACLE 11/12/19闪回操作
  • 前端vue3若依框架pnpm run dev启动报错
  • AI时代来临,什么是真正的大模型?【大模型扫盲系列】
  • 行转列实现方式总结
  • vue,uniapp,微信小程序解决字符串中出现数字则修改数字样式,以及获取字符串中的数字
  • SpringBoot API版本控制策略详解
  • 【前端】Svelte:动画效果
  • 华为机试HJ33 整数与IP地址间的转换
  • 【复旦微FM33 MCU 开发指南】ADC
  • 微服务中常用分布式锁原理及执行流程