鱼C论坛

 找回密码
 立即注册
查看: 644|回复: 4

[已解决]求大佬!

 关闭 [复制链接]
抢楼 抢楼 本帖为抢楼帖,欢迎抢楼! 
发表于 2021-12-16 21:05:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目:写一个凯撒加密程序。
#include <stdio.h>

int main()
{
        int ch;

        printf("请输入明文:");

        while ((ch = getchar()) != '\n')
        {
                if (ch >= 'a' && ch <= 'z')
                {
                        putchar('a' + (ch - 'a' + 3) % 26);
                        continue;
                }

                if (ch >= 'A' && ch <= 'Z')
                {
                        putchar('A' + (ch - 'A' + 3) % 26);
                        continue;
                }

                putchar(ch);
        }

        putchar('\n');

        return 0;
}
putchar('a' + (ch - 'a' + 3) % 26)是什么意思啊?
最佳答案
2021-12-17 10:04:14
何艺铧 发表于 2021-12-17 09:44
那x怎么变成a的啊
余数不是0吗?

      余数是 0,那不就是 'a' 吗,好好想想。是不是 'a' - 'a' = 0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-16 22:34:16 | 显示全部楼层
假设你输入的是 'm',理应变成 'p'

'm' 对应 ASCII 编码:109
'p' 对应 ASCII 编码:112
'a' 对应 ASCII 编码:97


运用你的代码:
'a' + (ch - 'a' + 3) % 26
= 'a' + ('m' - 'a' + 3) % 26
= 97 + (109 - 97 + 3) % 26
= 97 + 15
= 112(字符:'p')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-17 00:07:03 | 显示全部楼层
本帖最后由 jackz007 于 2021-12-17 00:16 编辑
'a' + (ch - 'a' + 3) % 26

    ch - 'a' 得到字符 ch 对 'a' 的偏移,0 是 'a',25 是 'z'。
    ch - 'a' + 3 为了加密,调整 ch 对 'a' 的偏移,当 ch 是 'a' 时,密文偏移为 3,对应的密文字符为 'd',我们知道,英语字母一共只有 26 个,当 ch = 'z' 时,对应密文字符的偏移是 ch - 'a' + 3 = 28,显然,已经超出了英语字母的偏移范围(0~25),为了使新的偏移能够回卷到正常值,所以,就有了 (ch - 'a' + 3) % 26 的操作,当 ch = 'z' 时,新的偏移不再是 28,而是 2,对应的密文字符为 'c'。而 'a' + (ch - 'a' + 3) % 26 是为了把密文字符偏移直接转换为密文字符。
       所以,取余操作是为了防范密文字符偏移超出正常范围而附加的保障措施。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-12-17 09:44:48 | 显示全部楼层
jackz007 发表于 2021-12-17 00:07
ch - 'a' 得到字符 ch 对 'a' 的偏移,0 是 'a',25 是 'z'。
    ch - 'a' + 3 为了加密,调整 c ...

那x怎么变成a的啊
余数不是0吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-17 10:04:14 | 显示全部楼层    本楼为最佳答案   
何艺铧 发表于 2021-12-17 09:44
那x怎么变成a的啊
余数不是0吗?

      余数是 0,那不就是 'a' 吗,好好想想。是不是 'a' - 'a' = 0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-9 16:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表