要求
为了使电文保密,往往按一定的规律将原文转换为密文,收报人再按原先约定的规律将
其译回原文。用以下规律将原文转换成密文:原文中的字母变成该字母后的第4个,如A→E,
B→F,..., V→Z,W→A,X→B,Y→C,Z→D,小写字母也按同样的规则进行转换,其他字符保持不
变。请编写程序实现输人一个字符串,输出其密文。如输入“China",输出“Glmre"
分析
- 对于大写字母,如果原字母加上4超过了'Z'(ASCII码为90),则需要从字母表的开头(即'A')继续计算。
- 对于小写字母,如果原字母加上4超过了'z'(ASCII码为122),则需要从字母表的开头(即'a')继续计算。
代码
#include <stdio.h> // 引入标准输入输出库
void main() // 主函数入口
{
char str[50]; // 定义一个字符数组str,用于存储输入的字符串,长度为50
int i = 0; // 定义一个整型变量i,并初始化为0,用于遍历字符串
printf("请输入学需要转换的字符串\n"); // 输出提示信息,要求用户输入需要转换的字符串
gets(str); // 使用gets函数从标准输入读取字符串到str中
while (str[i] != '\0') // 当字符串str的第i个字符不是字符串结束符'\0'时,继续循环
{
if (str[i] <= 'Z' && str[i] + 4 > 'Z') // 如果当前字符是大写字母且加上4后超过'Z'
{
str[i] = str[i] + 4 - 'Z' + 'A'; // 对其进行循环右移4位的转换
}
else if (str[i] <= 'z' && str[i] + 4 > 'z') // 如果当前字符是小写字母且加上4后超过'z'
{
str[i] = str[i] + 4 - 'z' + 'a'; // 对其进行循环右移4位的转换
}
else // 如果当前字符不是字母或加上4后没有超过对应的大小写字母范围
{
str[i] += 4; // 直接将当前字符加上4
}
i++; // 移动到字符串的下一个字符
}
puts(str); // 输出转换后的字符串
}