飞飞123 发表于 2016-9-9 22:43:55

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:46:11

本帖最后由 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;
}

5tao 发表于 2016-9-10 08:49:12

应该是
改:putchar('a' + (ch - 'a' + 23) % 26);

改:putchar('A' + (ch - 'A' + 23) % 26);

飞飞123 发表于 2016-9-10 08:50:33

mingcxx 发表于 2016-9-10 08:46
改了2句,代码如下:

好聪明,是怎么想出来的,真棒

飞飞123 发表于 2016-9-10 08:51:09

5tao 发表于 2016-9-10 08:49
应该是
改:putchar('a' + (ch - 'a' + 23) % 26);



是的

mingcxx 发表于 2016-9-10 09:09:25

本帖最后由 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)

飞飞123 发表于 2016-9-10 16:11:13

mingcxx 发表于 2016-9-10 09:09
慢慢学呗。就是起点+偏移。以大写字符为例。向后+3的代码,就是起点字符'A'+偏移量(ch - 'A' + 3)%26 ...

感谢&#128522;
页: [1]
查看完整版本: C语言输入的每个字母减3