摘要:
简单字符串处理,需要对ASCII码表很熟。
题目
描述
对输入的字符串进行加解密,并输出。
加密方法为:
当内容是英文字母时则用该英文字母的后一个字母替换,同时字母变换大小写,如字母 $a$ 时则替换为 $B$;字母 $Z$ 时则替换为 $a$;
当内容是数字时则把该数字加 $1$,如 $0$ 替换 $1$,$1$ 替换 $2$,$9$ 替换 $0$;
其他字符不做变化。
- 解密方法为加密的逆过程。
本题含有多组样例输入。
输入描述:
输入说明
输入一串要加密的密码
输入一串加过密的密码
输出描述:
输出说明
输出加密后的字符
输出解密后的字符
示例1
输入:
abcdefg
BCDEFGH
输出:
BCDEFGH
abcdefg
根据ASCII码表进行处理
Java语言不方便直接写ASCII码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
#include <bits/stdc++.h>
using namespace std;
void decode(string &s) { string res = ""; for (int i = 0, n = s.size(); i < n; i++) { char c = s[i]; if (isdigit(c)) { if (c == 48) { res += 57; } else { res += c - 1; } } else { if (c == 65) { res += 97 + 25; } else if (c == 97) { res += 90; } else { res += islower(c) ? c - 32 - 1 : c + 32 -1; } } } cout << res << endl; }
void encode(string &s) { string res = ""; for (int i = 0, n = s.size(); i < n; i++) { char c = s[i]; if (isdigit(c)) { if (c == 57) { res += 48; } else { res += c + 1; } } else { if (c == 90) { res += 97; } else if (c == 97 + 25) { res += 65; } else { res += islower(c) ? c - 32 + 1: c + 32 + 1; } } } cout << res << endl; }
int main() { cin.tie(nullptr)->sync_with_stdio(false); string stoencode; string stodecode; for (; cin >> stoencode;) { cin >> stodecode; encode(stoencode); decode(stodecode); } return 0; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
import java.util.*;
public class Main { private static void decode(String s) { StringBuilder res = new StringBuilder(); for (int i = 0, n = s.length(); i < n; i++) { char c = s.charAt(i); if (Character.isDigit(c)) { if (c == '0') { res.append('9'); } else { res.append((char)(c - 1)); } } else { if (c == 'A') { res.append('z'); } else if (c == 'a') { res.append('Z'); } else { res.append(Character.isLowerCase(c) ? (char)(c - 32 - 1) : (char)(c + 32 - 1)); } } } System.out.println(res.toString()); } private static void encode(String s) { StringBuilder res = new StringBuilder(); for (int i = 0, n = s.length(); i < n; i++) { char c = s.charAt(i); if (Character.isDigit(c)) { if (c == '9') { res.append('0'); } else { res.append((char)(c + 1)); } } else { if (c == 'Z') { res.append('a'); } else if (c == 'z') { res.append('A'); } else { res.append(Character.isLowerCase(c) ? (char)(c - 32 + 1) : (char)(c + 32 + 1)); } } } System.out.println(res.toString()); } public static void main(String[] args) { Scanner in = new Scanner(System.in); String stoEncode; String stoDecode; for (; in.hasNext();) { stoEncode = in.next(); stoDecode = in.next(); encode(stoEncode); decode(stoDecode); } } }
|
查表
本题还可使用查表方法,事先构造加解密对应的表。在此不再赘述。