Rot2 c++

xnoop

Cadet 2nd Year
Registriert
Aug. 2006
Beiträge
20
Hallo könnt ihr mir helfen

Ich komme einfach nicht mehr weiter

ich möchte rot 2 encodieren.. codiert habe ich schon... nun meine Frage

wenn ich a eingebe wird es zu "_" und b wird " ' "

eigentlich sollte a = y und b = z ausgeben

c = a; d = b; e =c; u.s.w. ausgeben

nun bei mir funktioniert a und b nicht ganz

könnt ihr mir weiterhelfen??



Code:
/******************************************************************************
Bibliotheken
******************************************************************************/
#include <iostream>
#include <cstdio>
#include <ctype.h>
using namespace std;

/******************************************************************************
Funktionsprototypen
******************************************************************************/

/******************************************************************************
Hauptsteuerung des Programms
******************************************************************************/

main(int argc, char *argv[])
{
    FILE *input = stdin;
    char *prog = argv[0];
    int zeichen;
    int rot = 2;
       
        while((zeichen = fgetc(input)) != EOF)
        {
            if(isalpha(zeichen))
            {
                if(toupper(zeichen) < ('A' + (26 - rot)))
                    putchar(zeichen - rot);
                else
                    putchar(zeichen - (26 - rot ));
            }
            else
               putchar(zeichen);
        }
        fclose(input);

        return 0;
}


:(
 
Zuletzt bearbeitet von einem Moderator:
Code:
if(toupper(zeichen) < ('A' + (26 - rot)))
    putchar(zeichen - rot);
else
    putchar(zeichen - (26 - rot ));

Die Abfrage würde ich nochmal überdenken. So kommt er doch gerade bei y und z in den else-Zweig.
Er soll es aber am Anfang des Alphabets.
 
Zuletzt bearbeitet von einem Moderator:
bobSE schrieb:
if(toupper(zeichen) < ('A' + (26 - rot)))
putchar(zeichen - rot);
else
putchar(zeichen - (26 - rot ));

Die Abfrage würde ich nochmal überdenken. So kommt er doch gerade bei y und z in den else-Zweig.
Er soll es aber am Anfang des Alphabets.


Ich habe schon mehrere male versucht. :( es geht eifach nicht
 
Auch auf die Gefahr hin, dass ich etwas spät antworte und du die Lösung schon gefunden hast, antworte ich trotzdem.

Code:
                if(toupper(zeichen) < ('A' + (26 - rot)))
                    putchar(zeichen - rot);
                else
                    putchar(zeichen - (26 - rot ));

Diese Abfrage ist nicht korrekt. Im Prinzip hätte dir einfaches Einsetzen eines Zahlenwertes für 'rot' schon bei der Analyse geholfen. Damit ergibt sich in der if-Abfrage nämlich

Code:
if(toupper(zeichen) < ('A' + (24)))
'A' + 24 = 'Y'
also:
Code:
if(toupper(zeichen) < 'Y')
Das bedeutet, dass alle Buchstaben < 'Y' dann im Folgenden um zwei Stellen im Alphabet nach vorne verschoben werden. 'a' und 'b' bzw 'A' und 'B' rutschen dabei aus dem Alphabet raus.

Im else-Zweig werden nur die Buchstaben 'Y' und 'Z' behandelt und um 24 Stellen nach vorne verschoben. Ich denke auch das hattest du nicht vor.

Code:
                if(toupper(zeichen) < ('A' + rot))
                    putchar(zeichen + (26 - rot ));
                else
                    putchar(zeichen - rot);

Das sollte der Code sein, den du suchst.
 
Zurück
Oben