C语言输入的每个字母减3
今天看了小甲鱼老师留的作业,做一个凯撒密码,把输入的字母每个加上3再输出,我想如果每个都减3又改怎么写呢?求教下面代码是每个都加3的#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;
} 本帖最后由 mingcxx 于 2016-9-10 08:47 编辑
改了2句,代码如下:#include <stdio.h>
int main(void)
{
int ch;
printf("请输入明文:");
while ((ch = getchar()) != '\n')
{
if (ch >= 'a' && ch <= 'z')
{
putchar('z' + (ch - 'z' - 3) % 26);
//putchar('a' + (ch - 'a' + 3) % 26);
continue;
}
if (ch >= 'A' && ch <= 'Z')
{
putchar('Z' + (ch - 'Z' - 3) % 26);
//putchar('A' + (ch - 'A' + 3) % 26);
continue;
}
putchar(ch);
}
putchar('\n');
return 0;
} 应该是
改:putchar('a' + (ch - 'a' + 23) % 26);
改:putchar('A' + (ch - 'A' + 23) % 26); mingcxx 发表于 2016-9-10 08:46
改了2句,代码如下:
好聪明,是怎么想出来的,真棒 5tao 发表于 2016-9-10 08:49
应该是
改:putchar('a' + (ch - 'a' + 23) % 26);
是的 本帖最后由 mingcxx 于 2016-9-10 09:25 编辑
飞飞123 发表于 2016-9-10 08:50
好聪明,是怎么想出来的,真棒
慢慢学呗。就是起点+偏移。以大写字符为例。向后+3的代码,就是起点字符'A'+偏移量(ch - 'A' + 3)%26就是'A'后偏移3个字符的新字符了。
模仿向后+3的,向前-3的类似,起点'Z'+偏移量(ch - 'Z' - 3)%26(负值)得到ch的新字符。
PS:“X%26”使得X是0到25之间(或0到-25) mingcxx 发表于 2016-9-10 09:09
慢慢学呗。就是起点+偏移。以大写字符为例。向后+3的代码,就是起点字符'A'+偏移量(ch - 'A' + 3)%26 ...
感谢😊
页:
[1]