C语言红宝书 谭浩强第六章 第12题

【描述】

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

A →Z B→Y C→X ……

a→z b→y c→x ……

即第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,非字母字符不变。

要求编程序将密码译回原文,并输出密码和原文。

整题的思路非常简单,就是定义变量,然后取值,循环,输出。
但是难点就在题目的条件,第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,所以我们这里需要用到ascii码的码值来进行运算

#include<stdio.h>
int main()
{
    char str[88];
    int i,len;
    gets(str);                               //输入字符数组
    len=strlen(str);                         //测量字符长度,确定for语句i的循环次数,测量字符数组长度的时候不要加引号,加了引号就变成了测量一个字符串
    puts(str);                               //输出字符数组
    for(i=0;i<len;i++)  
    {
        if(str[i]>='A'&&str[i]<='Z')
            str[i] = 27-(str[i]-64)+64;      //按照题目的要求,只能用ASCII码来进行求值,具体可以翻ascii码表(网上查或者翻红宝书后边皆可)
        else if(str[i]>='a'&&str[i]<='z')
            str[i] = 27-(str[i]-96)+96;
    }
    puts(str);
    return 0;
}

运行结果如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42766201/article/details/83752711