首页 > 其他分享 >华为机试HJ29 字符串加解密

华为机试HJ29 字符串加解密

时间:2024-11-08 18:16:08浏览次数:3  
标签:int 字母 加解密 len else char 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;
}

标签:int,字母,加解密,len,else,char,HJ29,字符串,机试
From: https://blog.csdn.net/bingw0114/article/details/143438037

相关文章

  • 华为机试HJ30 字符串合并处理
    首先看一下题描述按照指定规则对输入的字符串进行处理。详细描述:第一步:将输入的两个字符串str1和str2进行前后合并。如给定字符串"dec"和字符串"fab",合并后生成的字符串为"decfab"第二步:对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从......
  • 华为OD机试真题-整数编码-2024年OD统一考试(E卷)
    最新华为OD机试考点合集:华为OD机试2024年真题题库(E卷+D卷+C卷)_华为od机试题库-CSDN博客     每一题都含有详细的解题思路和代码注释,精编c++、JAVA、Python三种语言解法。帮助每一位考生轻松、高效刷题。订阅后永久可看,发现新题及时跟新。题目描述实现一种整数编码方法......
  • 华为OD机试真题-数组二叉树码-2024年OD统一考试(E卷)
    最新华为OD机试考点合集:华为OD机试2024年真题题库(E卷+D卷+C卷)_华为od机试题库-CSDN博客     每一题都含有详细的解题思路和代码注释,精编c++、JAVA、Python三种语言解法。帮助每一位考生轻松、高效刷题。订阅后永久可看,发现新题及时跟新。题目描述二叉树也可以用数组来......
  • 【华为OD机试】核酸检测人员安排
    题目描述在系统、网络均正常的情况下组织核酸采样员和志愿者对人群进行核酸检测筛查。每名采样员的效率不同,采样效率为N人/小时。由于外界变化,采样员的效率会以M人/小时为粒度发生变化,M为采样效率浮动粒度,M=N10%,输入保证N10%的结果为整数。采样员效率浮动规则:采样员......
  • 华为OD机试真题---字母组合
    华为OD机试中的“字母组合”题目是一道涉及字符串处理和回溯算法的编程题。以下是对该题目的详细解析:一、题目描述每个数字关联多个字母,关联关系如下:0关联“a”,“b”,“c”1关联“d”,“e”,“f”2关联“g”,“h”,“i”3关联“j”,“k”,“l”4关联“m”,“n......
  • 算法|牛客网华为机试31-40C++
    牛客网华为机试上篇:算法|牛客网华为机试21-30C++文章目录HJ31单词倒排HJ32密码截取HJ33整数与IP地址间的转换HJ34图片整理HJ35蛇形矩阵HJ36字符串加密HJ37统计每个月兔子的总数HJ38求小球落地5次后所经历的路程和第5次反弹的高度HJ39判断两个IP是否属于同一子......
  • 简单的C语言数据加解密算法实现与探讨
    在数据安全日益重要的今天,加密技术成为了保护信息不被未授权访问或篡改的重要手段。虽然在实际应用中,我们通常会采用如AES、RSA等复杂的加密算法,但理解加密的基本原理和实现一个简单的加密算法对于学习计算机安全基础至关重要。本文将介绍如何使用C语言实现一个基于简单替换加密(Su......
  • 华为机试HJ19 简单错误记录
    首先看一下题描述开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。 处理: 1、 记录最多8条错误记录,循环记录,最后只用输出最后出现的八条错误记录。对相同的错误记录只记录一条,但是错误计数增加。最后一个斜杠后面的带后缀名的部分(保留最后16......
  • 华为机试HJ20 密码验证合格程序
    首先看一下题描述密码要求: 1.长度超过8位 2.包括大小写字母.数字.其它符号,以上四种至少三种 3.不能有长度大于2的包含公共元素的子串重复(注:其他符号不含空格或换行) 数据范围:输入的字符串长度满足 1≤n≤100 输入描述:一组字符串。输出描述:如果符合要求输出......
  • 华为机试HJ16 购物单
    首先看一下题描述王强决定把年终奖用于购物,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的,下表就是一些主件与附件的例子:主件附件电脑打印机,扫描仪书柜图书书桌台灯,文具工作椅无如果要买归类为附件的物品,必须先买该附件所属的主件,且每件物品只能购买一次。每个......