欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-11 21:36:49
...

题目描述

  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();
    }
}

结果

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