题目描述
有一行电文,已按如下规律译成密码:
A-->Z a-->z
B-->Y b-->y
C-->X c-->x
...... ......
即第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,非字母字符不变。要求根据密码译回原文,并输出。
输入
输入一行密文
输出
解密后的原文,单独占一行。
样例输入
ZYX123zyx样例输出
ABC123abc
这道题目的难点在于如何表达出转换密文的式子。
大家需要首先知道A和a的ascll码分别是65和97。
当然可能还有更简单的方法,大家借鉴一下我这个就可以了。
#include<stdio.h>
#include<string.h>
int main()
{
char str[10];
char c;
gets(str);
int len=strlen(str);
for(int i=0;i<len;i++){
if(str[i]>='A'&&str[i]<='Z'){
c=64+26-(str[i]-64)+1;//直接表达出要交换的字母的ASCLL码值,然后再将其赋值给char型的str[i]
str[i]=c;
}
if(str[i]>='a'&&str[i]<='z'){
c=96+26-(str[i]-96)+1;
str[i]=c; //大家还可以将这两段if代码合成一个大的if(str[i]>='A'&&str[i]<='Z'||str[i]>='a'&&str[i]<='z'),因为我是个小白级别,尽量要代码还是有层次一些,这样的复杂式子尽量不要写了吧还是...
}
}
for(int i=0;i<len;i++){
putchar(str[i]);
}
}
大家如果有疑问欢迎在评论下方留言,一起讨论吧!
来源:https://blog.csdn.net/ayuanzzy/article/details/100064517