首页 > 其他分享 >【以练促学】1.小凯撒密码

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

时间:2022-10-15 15:01:33浏览次数:51  
标签:26 int 字母 促学 以练 后移 sec && 凯撒

要将"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.小凯撒密码_i++

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

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



主体部分:

通过​​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)​







标签:26,int,字母,促学,以练,后移,sec,&&,凯撒
From: https://blog.51cto.com/u_15796276/5759172

相关文章

  • 【C语言练习_2】用C语言实现凯撒密码加密解密
    1.凯撒密码简介又叫循环移位密码.它的加密方法是将明文中的每个字母用此字符在字母表中后面第k个字母替代.它的加密过程可以表示为下面的函数:E(m)=m+k(modn)其中:m为明文字......
  • 【以练促学】(C++基础语法)字符串篇
    (持续刷题持续更新...) 1.读取字符串cin>>arr;//输入字符串时,遇到空格或回车就会停止2. 读含空格字符串的3种方法:fgets(arr,100,stdin);cin.getline(arr,10......
  • 【以练促学】序
    今天刷题时灵感乍现!!!!!决定开个【以练促学】板块 主要想通过刷题的快乐,记录一些我觉得<还蛮重要的>知识点,以练促学如果也能给您提供一些学习思路的话,本小白会很开心的哈......
  • JS凯撒密码
    JS凯撒密码加密functionjiami(str,num){varnewStr="";for(leti=0;i<str.length;i++){if(str.charCodeAt(i)>=65&&str.char......
  • 使用js实现5种加密解密算法(凯撒密码、字母倒排序、单表置换、维基利亚、转换加密算法
    在学习操作系统的时候,我们会学到系统安全的章节,而在这一块会有关于加密解密算法的学习。一共有5种常见的加密解密算法:凯撒密码、字母倒排序、单表置换、维基利亚、转换加......