述 | |
---|---|
知识点 | 字符串 |
运行时间限制 | 10M |
内存限制 | 128 |
输入 | 输入说明 |
输出 | 输出说明 |
样例输入 | abcdefg BCDEFGH |
样例输出 | BCDEFGH abcdefg |
接口函数的编写,对字符串遍历,分情况加解密,关键点在于变换公式:字母要变换大小写,并且加密用后一个字母替换,解密用前一个字母替换,注意首尾字母的替换
加密公式:
s[i]是小写字母:(s[i] - 'a' + 1) % 26 + 'A'
s[i]是大写字母:(s[i] - 'A' + 1) % 26 + 'a'
s[i]是数字:(s[i] - '0' + 1) % 10 + '0'
解密公式:
s[i]是小写字母:(s[i] - 'a' - 1 + 26) % 26 + 'A'
s[i]是大写字母:(s[i] - 'A' - 1 + 26) % 26 + 'a'
s[i]是数字:(s[i] - '0' - 1 + 10) % 10 + '0'
源代码:
- #include <iostream>
- #include <string>
- using namespace std;
- void Encrypt(string psw, string& res){
- int size = psw.size();
- for(int i = 0; i < size; i++){
- if(psw[i] >= 'a' && psw[i] <= 'z')
- res[i] = (psw[i] - 'a' + 1) % 26 + 'A';
- else if(psw[i] >= 'A' && psw[i] <= 'Z')
- res[i] = (psw[i] - 'A' + 1) % 26 + 'a';
- else if(psw[i] >= '0' && psw[i] <= '9')
- res[i] = (psw[i] - '0' + 1) % 10 + '0';
- }
- }
- void unEncrypt(string psw, string& res){
- int size = psw.size();
- for(int i = 0; i < size; i++){
- if(psw[i] >= 'a' && psw[i] <= 'z')
- res[i] = (psw[i] - 'a' - 1 + 26) % 26 + 'A';
- else if(psw[i] >= 'A' && psw[i] <= 'Z')
- res[i] = (psw[i] - 'A' - 1 + 26) % 26 + 'a';
- else if(psw[i] >= '0' && psw[i] <= '9')
- res[i] = (psw[i] - '0' - 1 + 10) % 10 + '0';
- }
- }
- void main(){
- string psw1, psw2;
- getline(cin,psw1);
- getline(cin,psw2);
- string res1 = psw1;
- string res2 = psw2;
- Encrypt(psw1, res1);
- unEncrypt(psw2, res2);
- cout << res1 << endl << res2 << endl;
- }