2016-04-19 16 views
1

Ich hatte diese Aufgabe im letzten Monat erhalten und endete es falsch, wegen des Problems werde ich danach sagen. Momentan mache ich Cäsar's Cipher und ich glaube, ich habe das richtige Format. Ich frage den Benutzer nach einer Zeichenfolge und ich verschlüsselte mit einer key == 3. Ich möchte jedoch das Alphabet umschlingen, wenn der Klartextbuchstabe X, Y, Z, x, y oder z ist. Aber wenn ich diese Zeichen einfüge, bekomme ich keine A, B und C, sondern ]... und andere Klammern. Irgendwelche Hinweise, um das Problem zu beheben. Vielen Dank!Caesar Cipher Shifting Zeichen

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); 
} 

Antwort

4

Sie müssen sich die ASCII-Tabelle ansehen: http://www.asciitable.com/. Sie verwenden eine ASCII-Codierung der Zeichen.

Z hat einen Dezimalwert von 90, also ist 93 ']'. Sie müssen manuell an den Anfang des Alphabets zurückkehren. Dies geschieht am besten mit einem Modulo und Hinzufügen des ASCII-Wertes des ersten Buchstabens. Es liegt an Ihnen, wie Sie Großbuchstaben (zurück zu "a" oder "A") wickeln.

+1

Also im Grunde mod% 26 und den ersten Buchstaben 'a' hinzufügen? – SoonPro

+0

@SoonPro Yup, das sollte funktionieren. –

+0

Danke! Schätze die Hilfe und verstehe sie. – SoonPro

1

Sie müssen das Zeichen in seine Position im Alphabet konvertieren, dann finden Sie das Ergebnis modulo 26 (alphabetisch Länge), dann konvertieren Sie es zurück in das Zeichen. Etwas wie:

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

Sie fast es bekam:

#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 

In C können Sie den Modulo-Operator % verwenden, um umschlingen, wie oben gezeigt. Viel Glück!

+0

Danke! Verstanden gut! – SoonPro