Encryption 在保留大小写的同时使用密钥加密文本?

Encryption 在保留大小写的同时使用密钥加密文本?,encryption,cs50,caesar-cipher,Encryption,Cs50,Caesar Cipher,任务:凯撒算法(密码(c))通过按密钥(k)位置“旋转”每个字母来加密消息 要实现:ci=(pi+k)mod26 其中ci是密码,pi是明文,k是密钥 我的伪代码: 从命令行参数获取密钥 将键(k)转换为整数 提示用户输入纯文本(pi) 对于每个纯文本字符,保留大小写(使用C中的isalpha、isupper和islower函数) 最后,按键移动明文字符,例如“回家!”--“Hp Ipnf!”(如果键k=1,并保留字母的大小写,!保持不变!)*我正在努力解决这个问题 打印密文 intmain(

任务:凯撒算法(密码(c))通过按密钥(k)位置“旋转”每个字母来加密消息

要实现:ci=(pi+k)mod26 其中ci是密码,pi是明文,k是密钥

我的伪代码:

  • 从命令行参数获取密钥
  • 将键(k)转换为整数
  • 提示用户输入纯文本(pi)
  • 对于每个纯文本字符,保留大小写(使用C中的isalpha、isupper和islower函数)
  • 最后,按键移动明文字符,例如“回家!”--“Hp Ipnf!”(如果键k=1,并保留字母的大小写,!保持不变!)*我正在努力解决这个问题
  • 打印密文

  • intmain(intargc,字符串argv[])//从命令行参数获取密钥
    { 
    如果(argc!=2 | | atoi(argv[1])<0)
    { 
    printf(“打印有效密钥”);
    返回1;
    }
    int k=atoi(argv[1]);
    string p=get_string();//提示输入纯文本
    对于(inti=0,n=strlen(p);i
    实际上,您编写的代码只会返回您输入的纯文本值 这个问题的逻辑是 c[i]=(p[i]+k)%26 您必须对大写和小写应用不同的公式 我可以给你一段代码,这将帮助你解决你的问题

    intl=(p[i]-65+k)%26
    printf(“%c”,l+65);

    这里,k是关键 在本文中,我使用了字母的ASCII值,因为ASCII值是整数,我使用整数来存储值并应用给定的操作。 我之所以使用65,是因为大写字母“A”的ASCII值是65。 由于我们必须打印字符,因此我们使用%c打印字符。 这是大写字母,你可以用小写字母做类似的事情 如果此答案有帮助,请单击此旁边的箭头
    谢谢:)

    这里有什么问题吗?刚刚编辑了我的问题。正如我在伪代码中提到的,我正在努力转换字母。什么是
    c
    ?它不在此范围内声明。你的想法是正确的,但是当你的
    %26
    最终得到一个介于0和25之间的数字时,这些大多是不可打印的ASCII字符,你需要将
    'a'
    'a'
    添加回它,以使它们在字母表中。
    isalpha('p')
    将始终返回true,因为p是一个字母,也许你的意思是
    isalpha(p[i] )
    。谢谢!我正在打印ASCII字符,我应该添加“a”还是“a”来打印字母表?
    int main (int argc, string argv[]) //get key from command line argument        
         { 
          if (argc != 2 || atoi(argv[1]) < 0)
           { 
            printf ("print valid key");
            return 1;
           }
    
           int k = atoi(argv[1]);
    
           string p = get_string(); //prompt for plaintext
    
          for (int i=0, n = strlen(p); i < n; i++)
           { if (isalpha('p'))
            {
             if (isupper('p'))
             {
              printf ("%c", p[i]);
             }
             if (islower('p'))
             {
              printf ("%c", p[i]);
             }
            }
           }
    
         c[i]=(p[i]+k)%26;
          printf ("%c", c[i]);
         }