字符串加解密
对输入的字符串进行加解密,并输出。
加密方法
当内容是英文字母时则用该英文字母的后一个字母替换,同时字母变换大小写,如字母a时则替换为B;字母Z时则替换为a;
当内容是数字时则把该数字加1,如0替换1,1替换2,9替换0;
其他字符不做变化。
解密方法
解密方法为加密的逆过程。
数据范围
输入的两个字符串长度满足1≤n≤1000 ,保证输入的字符串都是只由大小写字母或者数字组成
输入描述
第一行输入一串要加密的密码
第二行输入一串加过密的密码
输出描述
第一行输出加密后的字符
第二行输出解密后的字符
实例
输入:
abcdefg
BCDEFGH
输出:
BCDEFGH
abcdefg
题解
此题较为简单,只要封装一个加密接口和一个解密接口,因为字符都是连续的存放,计算出目标值下标即可。
- 此处使用三个数组来存放使用到的字符
init()
接口将初始化三个全局变量,分别存放'a'-'z','A'-'Z','0'-'9'
encryptStr()
加密接口,循环右移取值decodeStr()
解密接口,循环左移取值
示例:
#include <stdio.h>
char g_lWord[26];
char g_bWord[26];
char g_num[10];
/*
* 初始化接口
*/
void init()
{
int i = 0;
for (i = 0;i < 26;i++) {
g_lWord[i] = 'a'+ i;
g_bWord[i] = 'A'+ i;
}
for (i = 0;i < 10;i++) {
g_num[i] = '0'+ i;
}
}
/*
* 循环右移取值,(0+1)%26 -> 1 (1+1)%26 -> 2 ...
* (25+1)%26 -> 0
*/
void encryptStr(char *str)
{
while(*str!=0) {
if ((*str >= 'a') && (*str <= 'z')) {
*str = g_bWord[(*str - 'a' + 1) % 26];
} else if ((*str >= 'A') && (*str <= 'Z')) {
*str = g_lWord[(*str - 'A' + 1) % 26];
} else if ((*str >= '0') && (*str <= '9')) {
*str = g_num[(*str - '0' + 1) % 10];
}
str++;
}
}
/*
* 循环左移取值,(0+25)%26 -> 25 (1+25)%26 -> 0 ...
* (25+25)%26 -> 24
*/
void decodeStr(char *str)
{
while(*str!=0) {
if ((*str >= 'a') && (*str <= 'z')) {
*str = g_bWord[(*str - 'a' + 25) % 26];
} else if ((*str >= 'A') && (*str <= 'Z')) {
*str = g_lWord[(*str - 'A' + 25) % 26];
} else if ((*str >= '0') && (*str <= '9')) {
*str = g_num[(*str -'0' + 9) % 10];
}
str++;
}
}
int main() {
char str1[1001] = {0};
char str2[1001] = {0};
init();
scanf("%s", str1);
scanf("%s", str2);
encryptStr(str1);
decodeStr(str2);
printf("%s\n",str1);
printf("%s\n",str2);
return 0;
}