牛客网华为机试【字符串加解密】
程序员文章站
2024-03-11 21:36:49
...
题目描述
-
对输入的字符串进行加解密,并输出。
-
加密方法为:当内容是英文字母时则用该英文字母的后一个字母替换,同时字母变换大小写,如字母a时则替换为B;字母Z时则替换为a;当内容是数字时则把该数字加1,如0替换1,1替换2,9替换0;其他字符不做变化。
-
解密方法为加密的逆过程。
接口描述:
实现接口,每个接口实现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个点:
- 小写字母 => 转换为后一个字符,并转换为大写字符(特殊的,
z
要更换为A
) - 大写字母 => 转换位后一个字符,并转换为小写字符(特殊的,
Z
要更换为a
) - 数字 => 转换为后一个数字字符(特殊的,
9
要更换为0
) - 其他 => 不变
解密时是这个过程的逆过程。
我的做法:
将输入的字符串转换为字符数组,使用加密的判断转换字符,最后使用StringBuilder
的 append
方法进行拼接即可。
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();
}
}