华为机考HJ29题解 | #字符串加解密#
字符串加解密
https://www.nowcoder.com/practice/2aa32b378a024755a3f251e75cbf233a
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
String a = in.nextLine();
String b = in.nextLine();
System.out.println(adMethod(a));
System.out.println(reMethod(b));
}
}
private static String adMethod(String ps){
char[] a=ps.toCharArray();
for(int i=0;i<a.length;i++){
int asci=(int)a[i];
if(asci>='0'&&asci<'9'){//数字
a[i]=(char)(a[i]+1);
}else if(asci=='9'){
a[i]='0';
}else if(asci>='a'&&asci<'z'){
a[i]=(char)(a[i]-'a'+'A'+1);
}else if(asci=='z'){
a[i]='A';
}else if(asci>='A'&&asci<'Z'){
a[i]=(char)(a[i]-'A'+'a'+1);
}else if(asci=='Z'){
a[i]='a';
}
}
return new String(a);
}
private static String reMethod(String ps){
char[] a=ps.toCharArray();
for(int i=0;i<a.length;i++){
int asci=(int)a[i];
if(asci>'0'&&asci<='9'){//数字
a[i]=(char)(a[i]-1);
}else if(asci=='0'){
a[i]='9';
}else if(asci>'a'&&asci<='z'){
a[i]=(char)(a[i]-'a'+'A'-1);
}else if(asci=='a'){
a[i]='Z';
}else if(asci>'A'&&asci<='Z'){
a[i]=(char)(a[i]-'A'+'a'-1);
}else if(asci=='A'){
a[i]='z';
}
}
return new String(a);
}
}
题目:
描述
对输入的字符串进行加解密,并输出。
加密方法为:
当内容是英文字母时则用该英文字母的后一个字母替换,同时字母变换大小写,如字母a时则替换为B;字母Z时则替换为a;
当内容是数字时则把该数字加1,如0替换1,1替换2,9替换0;
其他字符不做变化。
解密方法为加密的逆过程。
数据范围:输入的两个字符串长度满足
1≤𝑛≤1000 1≤n≤1000
,保证输入的字符串都是只由大小写字母或者数字组成
输入描述:
第一行输入一串要加密的密码
第二行输入一串加过密的密码
输出描述:
第一行输出加密后的字符
第二行输出解密后的字符
示例1
输入:
abcdefg BCDEFGH
输出:
BCDEFGH abcdefg
解题要点:
char类型在四则运算及比较中,会自动转为ASCII码进行计算,但是要变回字符需强制转换;
