有一行电文,已按如下规律译成密码
即第1个字母变成第26个字母,第i个字母变成第26-i+1个字母,非字母字符不变。要求编程序将密码变回原文,并输出密码和原文。
程序及其注释如下:
// 即第1个字母变成第26个字母,第i个字母变成第26-i+1个字母,非字母字符不变。要求编程序将密码变回原文,并输出密码和原文。
#include<stdio.h>
#include<string.h>
int main()
{
//定义一个数组元素全为0、长度为1024的数组
char s[1024] = {0};
//输入字符串
printf("请输入您需要译回原文的密码:");
//将输入的密码赋值给变量x
scanf("%s", s);
//定义一个整型变量表示输入的密码的字符串长度,在译码时索引一个个翻译,直至达到len(如下for循环条件)
int len = strlen(s);
//转换
for (int i = 0; i < len; ++i)
{
// 如果是小写字母(大写字母出来类似):
// 1. 先用s[i] - 'a'计算出s[i]是26个字母中从前往后数的第几个
// 2. 再用26 - (s[i]- 'a') - 1 转换为26个字母中从后往前数的第几个
// 3. 在2的结果上加上'a',即转换为对应从后往前的第几个字母
if(s[i] >= 'a' && s[i] <= 'z')
{
s[i] = 'a' + 26 - (s[i]-'a')-1;
}
else if (s[i] >= 'A' && s[i] <= 'Z')
{
s[i] = 'A' + 26 - (s[i] - 'A')-1;
}
}
printf("您输入的密码的原文为:%s\n", s);
return 0;
}