题目描述
有一行电文,已按下面规律译成密码:
即第1个字母变成第26个字母,第 i 个字母变成第( 26 - i - 1 )个字母,非字母字符不变。
要求分析
这道题目主要操作就是对字符的更改。通过ASCII查找发现,字符 ‘a’ 和字符 ‘z’ 对应的ASCII值为97和122,实现字符的变更其实就是对字符对应的ASCII值进行更改。及字符 ‘a’ 如想变更为字符 ‘z’ 则字符 ‘a’ +=25,此时的字符 ‘a’ 就变成字符 ‘z’。 根据所给的公式得到以下两公式:
详情代码
#include <stdio.h>
#include <string.h>
int main()
{
printf("请输入密码字符:");
//定义一个字符数组a,用来储存密码字符
char a[70];
//将输入的密码字符给字符数组a
gets(a);
//循环遍历输出密码字符数组a
printf("密码字符为:");
for (int i = 0; a[i]!='\0'; i++)
{
printf("%c", a[i]);
}
//换行操作
printf("\n");
//循环遍历密码数组
for (int i = 0; a[i]!='\0'; i++)
{
//当a[i]在字符a和字符z之间
if (a[i]<='z'&&a[i]>='a')
{ //将该值付给对应字母如(a对应字母为z)
a[i] = 122 - a[i] + 97;
}
//当a[i]在字符A和字符Z之间
if (a[i]<='Z'&&a[i]>='A')
{ //将该值付给对应字母如(A对应字母为Z)
a[i] = 90 - a[i] + 65;
}
}
//循环遍历输出原文字符数组a
printf("原文字符为:");
for (int i = 0; a[i]!='\0'; i++)
{
printf("%c", a[i]);
}
return 0;
}