2016-04-19 23 views
1

私は先月この課題を受け取りましたが、それ以降に述べる問題のために間違っていました。現在、私はCaesarのCipherをやっています。私は正しいフォーマットを持っていると信じています。ユーザーに文字列を要求し、key == 3で暗号化しました。しかし、平文がX,Y,Z,x,y、またはzの場合、アルファベットの周りをループしたいと思います。しかし、私はこれらの文字のいずれかを入れると、A,B、およびCが得られませんが、]...と他の中かっこがあります。問題を解決するためのヒント。 ありがとうございました!シーザー暗号シフト文字

void main() 
{  
    int key = 3; 

    char string[256]; 
    int i = 0; 

    printf("Enter the string you want encrypted\n"); 
    fgets(string, sizeof(string), stdin); 

    for (i = 0; i < strlen(string); i++) { 
     if (string[i] == ' ') {;} 

     else if ((string[i] >= 'a' && string[i] <= 'z' || string[i] >= 'A' && string[i] <= 'Z')){ 
       string[i] = string[i] + key; 
     } 
    } 
    printf("Cipher text:%s",string); 
} 

答えて

4

あなたはASCIIテーブル:http://www.asciitable.com/を見る必要があります。文字のASCIIエンコーディングを使用しています。

Zの小数点は90なので、93は ']'です。アルファベットの先頭に手動で折り返す必要があります。これはモジュロを使用し、最初のアルファベット文字のASCII値を追加するのが最適です。大文字をどのように折り返すかはあなた次第です( 'a'または 'A'に戻る)。

+1

基本的にmod%26で、最初の文字 'a'を追加しますか? – SoonPro

+0

@SoonProはい、それは動作するはずです。 –

+0

ありがとうございます!助けを感謝し、それを理解する。 – SoonPro

1

文字をアルファベットの位置に変換してから、26(アルファベットの長さ)のモジュロを見つけてから文字に変換する必要があります。以下のような何か:

char base = 0; 
if(string[i] >= 'a' && string[i] <= 'z'){ 
    base = 'a'; 
}else if(string[i] >= 'A' && string[i] <= 'Z'){ 
    base = 'A'; 
} 
if(base){ 
    string[i] = ((string[i] - base) + key) % 26 + base; 
} 
1

あなたはほとんどそれを得た:あなたは上記のように、周りにラップするモジュロ演算子%を使用することができますCで

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

int main() { 
    char string[256]; 
    int i = 0; 
    int key = 3; 
    const int num_letters = 26; 

    printf("Enter the string you want encrypted\n"); 
    fgets(string, sizeof(string), stdin); 

    for (i = 0; i < strlen(string); i++) { 
     if (string[i] >= 'a' && string[i] <= 'z') { 
      string[i] = 'a' + (string[i] - 'a' + key) % num_letters; 
     } 
     else if (string[i] >= 'A' && string[i] <= 'Z') { 
      string[i] = 'A' + (string[i] - 'A' + key) % num_letters; 
     } 
    } 
    printf("Encrypted: %s\n", string); 
    return 0; 
} 

Enter the string you want encrypted 
Zorro 
Encrypted: Cruur 

。がんばろう!

+0

ありがとう!よく分かった! – SoonPro

関連する問題