有一行代码,已按下面规律译成密码:例如:A➡Z,a➡z即第i个字母变成第(26-i+1)个字母.其他字符不需改变。
那么首先需要解决的问题就是怎样变换字母,我们知道第一个大写字母的ASCII码是65,那么在ASCII码计算中,
第i个大写字母理解:
第1个字母A应该是65(ASCII码)-64=1
第2个字母B应该是66-64=2
……(以此类推)
那么清楚这点之后,我们来开始转换
26-i+1=26-(a[i]-64)+1 =26+64+1-a[i]=91-a[i]
那么第(26-i+1)个字母,即第91-a[i]个字母的ASCII码应该是91-a[i]+64
所以在转换大写字母是应该用**155-a[i]**来计算
具体代码如下。
#include<stdio.h>
int main()
{
int i,n;
char a[80];
printf("请输入一行电文:\n");
gets(a);
printf("\n电文是:");
puts(a);
i=0;
while(a[i]!='\0')
{
if(a[i]>='a'&&a[i]<='z')
a[i]=219-a[i];
else if(a[i]>='A'&&a[i]<='Z')
a[i]=155-a[i];
else
a[i]=a[i];
i++;
}
n=i;
printf("\n密码是:");
for(i=0;i<n;i++)
{
if(a[i]!='\0')
printf("%c",a[i]);
}
return 0;
}
运行结果如下。