【以练促学】1.小凯撒密码

时间:2022-10-15 14:55:45

要将"china"译成密码;

译码规律是:用原来字母后面的第4个字母代替原来的字母.

例如,字母"A"后面第4个字母是"E"."E"代替"A"。因此,"china"应译为"glmre"。

#include<stdio.h>
int main()
{
char sec[11]={0};

//gets(sec);
scanf("%s", sec);

//for (int i = 0; sec[i] != '\0'; i++)
int sz = sizeof(sec) / sizeof(sec[0]);
for(int i=0;i<sz-1;i++)
{
if (sec[i]>='A' && sec[i]<='Z')
{
sec[i] = (sec[i] + 4-'A') % 26+'A';
}
if (sec[i] >= 'a' && sec[i]<='z')
{
sec[i] = (sec[i] + 4-'a') % 26 + 'a';
}
}
//puts(sec);
printf("%s", sec);
return 0;
}
  • 知识点:

数组,ASCII码


  • 解析:

先声明一个数组,并给其初始化​​char sec[11]={0};​


接着输入​​scanf("%s", sec);​​​/​​gets(sec)​


接着进入循环,有两种方法:

一种是通过得到字符串的长度,用​​for(int i=0;i<sz-1;i++)​​来限制,要注意多计数了\0,结果要减1;

另一种是通过用数组中的数!='\0'来限制​​for (int i = 0; sec[i] != '\0'; i++)​​,但是要注意字符串中不能有空格;

【以练促学】1.小凯撒密码

【以练促学】1.小凯撒密码

【以练促学】1.小凯撒密码



主体部分:

通过​​if (sec[i]>='A' && sec[i]<='Z')​​​​if (sec[i] >= 'a' && sec[i]<='z')​​将字符窜分到不同的操作中去;

程序精华​sec[i] = (sec[i] + 4-'a') % 26 + 'a';​

+4是后移操作

-’a'是计算到a的距离

%26是求距离超出26的字符绕一圈回来后,离a的距离:比如 'W' 后移 4 再减 'A' 变成了 26,超出了范围最大的 25,所以对 26 取余,就成了 0,0 就是 'W' 后移 4 之后与 'A' 真正的距离

最后加‘a'得到字符再ASCII码中对应的数


输出​​ printf("%s", sec)​