2017-09-19 1 views
1

Hallo Ich bin stecken, während Sie versuchen, Zeichenfolge mit Zeiger zu verschlüsseln und zu entschlüsseln. Ich muss das Alphabet um +1 verschieben. Beispiel: Hallo wird Ifmmp sein. Und ich muss auch andere Zeichen wie $% ^^ entfernen. Wenn also die Zeichenfolge 'z' ist, würde mir +1 geben. Hier ist mein Code.Chiffre und entziffern String durch Verschieben +1 mit Zeiger

char *cipher(char *s) { 
    int i =0; 
    int shift = 1; 

    while(*(s+i)!= '\0') { 
     if (*(s+i)) { 
      *(s+i)+= (shift); 
     } 
     i++; 
    } 
} 

char *decipher(char *s) { 
    int i =0; 
    int shift = -1; 

    while(*(s+i)!= '\0') { 
     if (*(s+i) +shift) { 
      *(s+i)+= (shift); 
     } 
     i++; 
    } 
} 

meine aktuelle Ausgabe lautet: chiffrieren: abcxyz -> bcdyz { zu entziffern: bcdyz {-> abcxyz

Dank

+3

ich ziemlich sicher bin, dass 'if (* (n + i) + Shift> = 65 && (* (s + i) + = shift <= 90))' nicht tut, was du willst. Beachte das '* (s + i) + = ...'. – mch

+0

Danke, löste das Problem. hast du eine Idee, wie ich andere Charaktere wie! @ # $ eliminieren kann? @mch – skylight

+0

Werfen Sie einen Blick auf http://man7.org/linux/man-pages/man3/isalpha.3.html – mch

Antwort

0

First of all, die während ändern zu For-Loop, wenn Sie erhöhen Iterator an der for-Schleife und es ist Ihre Bedingung der am besten lesbaren Code ist For-Loop

Second, müssen Sie Condition hinzufügen- If der Brief ist 'z' assign ‚a‘ else das gleiche tun

Drittens, wenn Sie einen anderen Buchstaben avoide wollen Sie müssen Bedingung hinzuzufügen: bei chipher Funktion

if((*s+i)<'a' || (*s+i)>'z'){ 
    do what you want 
} else { 
    avoide 
} /// it will work if you use character encoding that the alphebet is by order and continuous 

ich den Code mit einer Änderung hinzufügen, Sie werden das gleiche mit der nächsten Funktion

char *cipher(char *s){ 
int shift = 1; 
for(int i=0; *(s+i)!= '\0'; i++){ 
    if (*(s+i)){ 
    //i add that condtion for 'z' you need to add the same condition   to the next function 
    if(*(s+i)=='z'){ 
    *(s+i)='a'; 
    }else{ 
    *(s+i)+= (shift); 
    } 
    } 
} 
} 

char *decipher(char *s){ 
    int shift = -1; 
    for(int i=0 ;*(s+i)!= '\0'; i++){ 
    if (*(s+i) +shift){ 
     *(s+i)+= (shift); 
    } 
    } 
} 
+0

Vielen Dank! schätze deine Hilfe! – skylight

0

i um +1

das Alphabet verschieben müssen hinzufügen 0

Nur Umschaltzeichen a-z. So muss Code diejenigen erkennen

char *shift_AZ(char *s, int shift) { 
    // Bring shift into 0-25 range 
    shift %= 26; 
    if (shift < 0) shift += 26; 

    // loop until at end of string 
    // while(*(s+i)!= '\0') { 
    while(*s) { 
    // Assuming ASCII, detect select characters 
    if ((*s >= 'a') && (*s <= 'z')) { 
     // Do the shift, wrap around via %26 
     *s = (*s - 'a' + shift)%26 + 'a'; 
    } 
    s++; // next chraracter 
    } 

    char *cipher(char *s) { 
    return shift_AZ(s, 1); 
    } 

    char *decipher(char *s) { 
    return shift_AZ(s, -1); 
    }