2016-05-14 4 views
1

シーザーと2線式の暗号を使って単語を暗号化して解読するという宿題がありました。私はこのコンセプトを理解していますが、私はそれをコードに入れるのに苦労しています。Cレールを使った2レールとシーザー暗号

運動 *これは

単語「Alexandrossa」を使用し、2レールフェンスの方法を使用して暗号化した後、シーザーに前進2文字で(すなわち、AはCになる、またはXがZとなります)私のコード:

#include <stdio.h> 
#include <math.h> 
#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

int main() 

{ 
    char a[2][6] = {'A', 'L', 'E', 'X', 'A', 'N', 'D', 'R', 'O', 'S', 'S', 'A'}; 
    char row, col; 

    for (row = 0; row < 2; ++row) 
    { 
     for (col = 0; col < 6; ++col) 
     { 
      printf("%c", a[row][col]); 
     } 

     printf("\n", a[row][col]); 
    } 

    return 0; 
} 

それは ALEXAN

...として表示します

DROSSA

しかし、私は、このような出力表示をすることはできません。

AEADOS

LXNRSA

結果: AEADOSLXNRSA

誰もが可能であればこのプログラムを完了するのに役立ちますシーザー暗号部分を問題なく完成させるためのヒントを少なくとも与えてくれて、本当に感謝しています。ありがとうございました。

+2

シーザー暗号のヒント:文字は数字だけです。 – ChiefTwoPencils

+0

@ChiefTwoPencilsもう一つのヒント:文字を表す数字は連続している必要はありません。 – MikeCAT

答えて

0

文字列をループして、必要に応じて文字列を操作できます。

#include <stdio.h> 

int main() { 
    char a[2][6] = {'A', 'L', 'E', 'X', 'A', 'N', 'D', 'R', 'O', 'S', 'S', 'A'}; 
    char row, col; 
    printf("Rail cipher:\n"); 
    for (row = 0; row < 1; ++row) { 
     for (col = 0; col < 12; col += 2) { 
      printf("%c", a[row][col]); 
     } 
     //printf("\n"); 
     for (col = 0; col < 12; col += 2) { 
      printf("%c", a[row][col + 1]); 
     } 
    } 
    printf("\nCaesar cipher:\n"); 
    for (row = 0; row < 12; ++row) { 
     char c = a[0][row]; 
     c = (char) (c + 2); 
     printf("%c", c); 
    } 
    return 0; 
} 

上記のコードでは、2つの方法で文字列を暗号化しています。解読は、アルゴリズムを逆にするだけで同様に行われます。

テスト

$ ./a.out 
Rail cipher: 
AEADOSLXNRSA 
Caesar cipher: 
CNGZCPFTQUUC 
Process finished with exit code 0 
+1

Yeees!ありがとうございました!私は本当に助けに感謝します! :D – miiworld2

関連する問題