牛客网华为机试【字符串加解密】

文章目录

题目描述

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

  2. 加密方法为:当内容是英文字母时则用该英文字母的后一个字母替换,同时字母变换大小写,如字母a时则替换为B;字母Z时则替换为a;当内容是数字时则把该数字加1,如0替换1,1替换2,9替换0;其他字符不做变化

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

接口描述:

实现接口,每个接口实现1个基本操作:

void Encrypt (char aucPassword[], char aucResult[]):在该函数中实现字符串加密并输出

说明:

1、字符串以\0结尾。

2、字符串最长100个字符。

int unEncrypt (char result[], char password[]):在该函数中实现字符串解密并输出

说明:

1、字符串以\0结尾。
2、字符串最长100个字符。

输入描述:
输入一串要加密的密码
输入一串加过密的密码

输出描述:
输出加密后的字符
输出解密后的字符

示例
输入

abcdefg
BCDEFGH

输出

BCDEFGH
abcdefg

题目分析

加密的处理,一共有4个点:

  1. 小写字母 => 转换为后一个字符,并转换为大写字符(特殊的,z 要更换为 A
  2. 大写字母 => 转换位后一个字符,并转换为小写字符(特殊的,Z 要更换为 a
  3. 数字 => 转换为后一个数字字符(特殊的,9 要更换为 0
  4. 其他 => 不变

解密时是这个过程的逆过程。

我的做法:
将输入的字符串转换为字符数组,使用加密的判断转换字符,最后使用StringBuilderappend 方法进行拼接即可。

java 代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * Created by Feng on 2020/2/20 12:31
 * CurrentProject's name is java8
 * 字符串加解密
 */
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));

        String line;
        while ((line = bufferedReader.readLine()) != null){
            // 加密
            System.out.println(encrypt(line));

            // 再接收一行
            line = bufferedReader.readLine();
            // 解密
            System.out.println(unEncrypt(line));
        }
    }

    /**
     * 加密方法
     * @param password 原始密码
     * @return 加密后的密码
     */
    private static String encrypt(String password){
        StringBuilder sb = new StringBuilder();

        char[] chars = password.toCharArray();
        for (char aChar : chars) {
            // 小写字母
            if(aChar >= 'a' && aChar <= 'z'){
                if(aChar == 'z'){
                    sb.append('A');
                } else {
                    sb.append((char)(aChar + 1 - 32));
                }
                continue;
            }

            // 大写字母
            if(aChar >= 'A' && aChar <= 'Z'){
                if(aChar == 'Z'){
                    sb.append('a');
                } else {
                    sb.append((char)(aChar + 1 + 32));
                }
                continue;
            }

            // 数字
            if(aChar >= '0' && aChar <= '9'){
                if(aChar == '9'){
                    sb.append('0');
                } else {
                    sb.append((char)(aChar + 1));
                }
                continue;
            }

            // 其他字符
            sb.append(aChar);
        }

        return sb.toString();
    }

    /**
     * 解密
     * @param password 加密的密码
     * @return 真实密码(解密后的密码)
     */
    private static String unEncrypt(String password){
        StringBuilder sb = new StringBuilder();

        char[] chars = password.toCharArray();
        for (char aChar : chars) {
            // 小写字符
            if(aChar >= 'a' && aChar <= 'z'){
                if(aChar == 'a'){
                    sb.append('Z');
                } else {
                    sb.append((char)(aChar - 32 - 1));
                }
                continue;
            }

            // 大写字符
            if(aChar >= 'A' && aChar <= 'Z'){
                if(aChar == 'A'){
                    sb.append('z');
                } else {
                    sb.append((char)(aChar + 32 -1));
                }
                continue;
            }

            // 数字
            if(aChar >= '0' && aChar <= '9'){
                if(aChar == '0'){
                    sb.append('9');
                } else {
                    sb.append((char)(aChar - 1));
                }
                continue;
            }

            // 其他字符
            sb.append(aChar);
        }

        return sb.toString();
    }
}

结果

牛客网华为机试【字符串加解密】

牛客网华为机试【字符串加解密】牛客网华为机试【字符串加解密】 你家宝宝 发布了128 篇原创文章 · 获赞 121 · 访问量 3万+ 私信 关注
上一篇:Jmeter 响应 uncode 编码转为中文


下一篇:类头文件定义