2017-04-21 43 views
0

任务:凯撒算法(cipher(c))通过按键(k)位置“旋转”每个字母来加密消息。在保存案例的同时使用密钥加密文本?

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

我的伪代码:从命令行参数

  1. 获取密钥。
  2. 将密钥(k)转换为整数。
  3. 为纯文本(PI)
  4. 每个纯文本字符,保存的情况下提示用户(使用因而isalpha,isupper和islower判断功能中C.
  5. 通过例如键明文字符最后转移 - “回家! “--- ”惠普Ipnf!“(如果密钥k = 1,并保留字母/小写,!仍为!)。** 我这个
  6. 打印密文挣扎。

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

刚编辑我的问题。正如我在我的伪代码中提到的,我正在努力改变这些信件。 – Aakash

+0

'c'是什么?它没有在这个范围内声明。你有正确的想法,但是当你'%26'结束时你会得到一个介于0到25之间的数字,这些大多数是不可打印的ASCII字符,你需要添加''a'或''A'到它让他们在字母表中。 –

回答

0

实际上,您已写入将简单地返回纯文本的值已输入 逻辑为这个问题的代码是 C [1] =(P [1] + K)%26 你必须使不同套用这个公式的大写和小写 我可以给你的代码片段,这将帮助您解决问题

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

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

相关问题