S1E15凯撒加密程序求教
答案代码如下,其中这两句putchar('a' + (ch - 'a' + 3) % 26); putchar('A' + (ch - 'A' + 3) % 26);请问是什么含义呢?{:10_277:}#include <stdio.h>
int main(void)
{
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;
} 这不就是后移3位吗 当 ch 是一个小写字母的时候,ch - 'a' 的数值为 0 ~ 25,就是说,'a' + 0 = 'a' ,'a' + 25 = 'z'。那么,ch - 'a' + 3 的数值范围变成了 3 ~ 28,这个数值范围显然已经偏离了小写字母的正常偏移范围,虽然 'a' + 3 = 'd',那么,'a' + 28 是什么字母?'a' ~ 'c' 又到哪里去了?如果将这个数值对 26 取余,(ch - 'a' + 3) % 26,那么,当 ch - 'a' + 3 的值是 3~25 的时候,取不取余结果一样,当数值是 26~28 的时候,相对应的余数是 0 ~ 2,这正是我们想要的,于是,字母偏移的数值范围又重新被调整回了 0 ~ 25,从而覆盖了英文字母的正常范围。ch 是大写字母时的情况完全参照小写字母。
本帖最后由 救赎自我- 于 2022-4-21 11:48 编辑
是 jackz007 发表于 2022-4-21 11:41
当 ch 是一个小写字母的时候,ch - 'a' 的数值为 0 ~ 25,就是说,'a' + 0 = 'a' ,'a' + 25 = 'z' ...
感谢大佬耐心讲解我悟了{:10_279:}
页:
[1]