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

时间:2017-04-21 12:53:59

标签: encryption cs50 caesar-cipher

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

实现:ci =(pi + k)mod26 其中ci是密码,pi是明文,k是关键。

我的伪代码:

  1. 从命令行参数获取密钥。
  2. 将键(k)转换为整数。
  3. 提示用户输入纯文本(pi)
  4. 对于每个纯文本字符,保留大小写(在C中使用isalpha,isupper和islower函数。
  5. 最后用键移动明文字符 - 例如“回家!” ---“Hp Ipnf!” (如果键k = 1,并且保留字母的大写/小写,!仍为!)。 ** 我正在努力解决
  6. 打印密文。
  7. 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]);
         }
    

1 个答案:

答案 0 :(得分:0)

实际上,您编写的代码只会返回您输入的纯文本的值 这个问题的逻辑是 c [i] =(p [i] + k)%26 你必须对大写和小写不同地应用这个公式 我可以给你一段代码,这将有助于你解决问题

int l = (p[ i ] -65+k)%26 printf("%c",l+65);

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