《算法笔记》 2.5小节 问题 D: 习题6-12 解密

孤街浪徒 提交于 2019-11-28 13:27:11

题目描述

有一行电文,已按如下规律译成密码:

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]);
    }

}

大家如果有疑问欢迎在评论下方留言,一起讨论吧!

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!