2016-11-30 8 views
1
#include <stdio.h> 
#include <string.h> 
#include <ctype.h> 


void encrypt(char *theString, int shift) { 
    while (*theString) { 
     if (isalpha(*theString)) { 
      *theString += shift; 
     } 
     theString++; 
    } 
} 

int main(void) { 
    int shift; 
    int *ip; 

    ip = &shift; 
    char theString[80]; 
    printf("Enter String: "); 
    fgets(theString, 80, stdin); 
    printf("Enter Number: "); 
    scanf("%d", &shift); 

    encrypt(theString,shift); 
    puts(theString); 

    return(0); 
} 

Bis hierhin, danke für die Hilfe.Caesar Cipher Zurück zu 'A'/'a'

Jetzt brauche ich Hilfe zurück zu 'A', wenn der Benutzer 'Z' eingibt, anstatt zu [(und für Kleinbuchstaben) zu gehen. Ich weiß, ich brauche einige if-Aussagen, nicht sicher welche. Danke für jede Hilfe.

+1

Sie müssen den Ascii-Wert nach der Verschiebung überprüfen, es ist größer als 'Z', subtrahieren Sie 26 und Sie werden wieder umkehren. Entschlüsseln wird einfach das Gegenteil sein. Ich nehme auch an, dass der Verschiebungsbetrag nie größer als 26 sein wird für diesen –

+1

Ihr Einzug macht mich traurig. – kay

+1

@Kay Eine Zunahme der Einrückung kann nicht zur weltweiten Traurigkeit führen. Umgestaltet für Ihr Vergnügen! –

Antwort

1

Zuerst das Zeichen drehen. Dies könnte zu ungültigen Zeichen führen (rotiert nach Z).

Nachdem Sie das Zeichen gedreht haben, prüfen Sie, ob das Zeichen größer als 'Z' ist. Wenn dies der Fall ist, müssen Sie herausfinden, wie weit hinter "Z" es ist. Ziehe dazu 'Z' vom Charakter ab.

Sie haben jetzt "wie weit hinter Z" das Zeichen ist. Sie müssen diese Zahl nehmen und sie in "wie weit nach A" umrechnen, was bedeutet, dass Sie 1 subtrahieren würden.

Jetzt, da Sie "wie weit hinter A" haben, können Sie einfach das Zeichen "A" hinzufügen Wert, und Sie erhalten den gewünschten Wert.

Zusammenfassend, subtrahieren Sie 'Z', addieren Sie 'A' und subtrahieren Sie 1 ".

+1

"Subtrahieren von 'Z' addieren 'A' und subtrahieren 1", oder subtrahieren Sie einfach 26. Ich denke, wir können die Anzahl der Buchstaben im ASCII-Alphabet als eine bekannte Konstante nehmen. :) – kay

+2

@Kay Immer schön, magische Zahlen zu vermeiden, auch wenn sie funktionieren :) –

+2

Das ist keine Methode, die dem C-Standard entspricht. Der C-Standard erfordert nur, dass die Ziffern "0" bis "9" nacheinander dargestellt werden. –

Verwandte Themen