关于C语言字母译码

来源:互联网 发布:helloworld的java程序 编辑:程序博客网 时间:2024/05/21 04:22

假如要将”China”译成密码,译码规律是:用原来字母后面的第4个字母代替原来的字母,例如:字母”A”后面第4个字母是”E”.”E”代替”A”。因此,”China”应译为”Glmre”。

  • 代码如下:
#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>  #include<stdlib.h>#include<math.h>int main(){    char a[10] = { 0 };    int j = 0;    scanf("%s", a);    int i = 0;            for (i = 0; i < sizeof(a) / sizeof(a[0]); i++)            {                if (a[i]>'A'&&a[i] < 'W')//判断是否为大写字母                {                  a[i] = a[i] + 4;                }                else if (a[i]>'a'&&a[i] < 'w')//判断是否为小写字母                {                    a[i] = a[i] + 4;                }    }    printf("%s\n", a);    system("pause");    return 0;}

大多数同学会想到上面那种方法,但上面那种方法还不够严谨,因为根据ASCII表一旦你输入w,它的ASCII值为:119,它的值加上4可不就是a了,因此上面的代码还有bug,因此我们必须要保证我们输入的字母ASCII值加上4还不能越过z,得又回到a,大写字母也是一样。正确的代码如下:

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>  #include<stdlib.h>#include<math.h>int main(){    char a[10] = { 0 };    int j = 0;    scanf("%s", a);//输入字符串    int i = 0;    for (i = 0; i < sizeof(a) / sizeof(a[0]); i++)    {        if (a[i]>'A'&&a[i] < 'W')//判断字母是否是大写        {          a[i] = a[i] + 4;得到译码值        }        else if (a[i] >= 'W'&&a[i]<='Z')//判断字母ASCIIZ值是否可能越界        {          a[i] = 'A' + abs('Z' - (a[i] + 3));//使特殊字母加4后回到A的起始位置        }        else if (a[i]>'a'&&a[i] < 'w')//判断是否为小写字母        {            a[i] = a[i] + 4;得到译码值        }        else if(a[i] >= 'w'&&a[i]<='z')//判断字母ASCIIZ值是否可能越界        {            a[i] = 'a' + abs('z' - (a[i] + 3));//使特殊字母加4后回到A的起始位置        }}    printf("%s\n", a);    system("pause");    return 0;}

那让我们来试试这个代码:

  • 输入:China
  • 输出:Glmra

那我们输入个特殊值:

-输入:WXYX
-输出:ABCD

事实证明上面这个代码更加严谨。

原创粉丝点击