Verschlüsselung durch Buchstabenverschiebung
-
Hallo,
ich lerne zur Zeit C(++) und wollte mal nachfragen, wie man eine einfache verschlüsselung durch verschiebung der Buchstaben macht. Also man gibt z.B. "STU" ein und dann als verschlüsselte Ausgabe kommt dann: "UVW".
Also so eine Alphabet verschiebung
-
Das kannst du mit ein paar Additionen, Modulo und Bereichsverschiebungen auch selber schreiben (ja, C kann mit Buchstaben (bzw deren ASCII-Wert) auch rechnen ;)).
-
CStoll schrieb:
Das kannst du mit ein paar Additionen, Modulo und Bereichsverschiebungen auch selber schreiben (ja, C kann mit Buchstaben (bzw deren ASCII-Wert) auch rechnen ;)).
Ja das weis ich auch, aber wie Rechne ich dem ASCII z.b. 3+ dazu ?
printf("Bitte ein Wort/Satz eingeben: "); scanf("%c", &eingabe); printf("ASCII: %c=%d ", eingabe,eingabe);
Jetzt muss doch der Variable "eingabe" etwas dazu gerechnet werden, wie macht man das denn ?
-
Du nimmst den Buchstaben, addierst (z.B.) 3 drauf und sorgst anschließend dafür, daß er wieder im Bereich 'A'..'Z' landet.
(ein paar Grundkenntnisse in Mathematik sind dafür erforderlich, aber zu schwer dürfte das auch nicht werden, denke ich)
-
CStoll schrieb:
Du nimmst den Buchstaben, addierst (z.B.) 3 drauf und sorgst anschließend dafür, daß er wieder im Bereich 'A'..'Z' landet.
(ein paar Grundkenntnisse in Mathematik sind dafür erforderlich, aber zu schwer dürfte das auch nicht werden, denke ich)
Hab das hinbekommen, allerdings geht das nur mit einem Buchstaben, wenn ich ein Wort eingebe wird nur der ASCII Code des ersten Buchstaben angezeigt.
-
Dann nimst du eine Schleife und greifst per Index auf die einzelnen Buchstaben zu
-
CStoll schrieb:
Dann nimst du eine Schleife und greifst per Index auf die einzelnen Buchstaben zu
Okay, aber woher soll man wissen wie lang das Wort ist wenn man nur das Wort eingibt ? Wie man Buchstaben zählt weis ich nicht :S
-
strlen() hilft ungemein weiter.
(Ein Vorschlag: Lern erst einmal ein paar Grundlagen in C - vor allem das Kapitel "Strings" ist recht hilfreich für dich)
PS: Wenn du C++ verwendest - im Magazin habe ich einen ausführlichen Artikel über dessen String-Klasse
std::string
.
-
mit scanf("%c",eingabe); wird nur das erste zeichen eingelesen! ("%c"=char-Zeichen) bei der formatierten eingabe mit scanf musst du deshalb anstatt dem "%c" ein "%s" (=String) schreiben. doch bevor du dich bei der ausgabe wunderst: es wird nur das erste wort eingelesen, bricht also bei space ab. dafür gibts funktionen wie gets(), die einen kompletten string einlesen
-
Das Problem ist, wenn ich die Variable mit mehreren Zeichen deklariere:
char string[100];
wird der ASCII Code nicht mehr angezeigt, auch wenn ich nur ein Buchstabe eingebe
-
So das Problem ist gelöst, mit einer festen Anzahl an Buchstaben bekomme ich es hin. Aber wie zähle ich die Buchstaben ?
Über "strlen()" hab ich gegoogelt aber kein Beispiel gefunden
-
#include <stdio.h> #include <string.h> int main() { char text[101]; unsigned int i; printf("Eingabe Text (bis zu %i Zeichen):\n", sizeof (text)-1); gets(text); printf("\nDer Text lautet\n%s\n\n", text); for (i=0; i<strlen(text); i++) { if (text[i]>='A' && text[i]<='Z' || text[i]>='a' && text[i]<='z') { text[i]++; if (text[i]=='Z'+1 || text[i]=='z'+1) text[i]='a'; } } printf("Der Text lautet codiert\n%s\n", text); return 0; }
-
@H.E.: dein Verfahren ist erstens unsicher (gets() prüft nicht, ob der Nutzer wirklich die Beschränkung einhält) und zweitens nicht beliebig einsetzbar (du kannst nur um 1 Wert vorwärts verschieben und das große 'Z' wird zu einem kleinen 'a' kodiert. Und drittens wird es mit isalpha() und Kollegen bstimmt kompakter aussehen.
@Tänzer: strlen() zählt alle Zeichen des Strings, bis es auf ein '\0' (Stringende-Marke in C) trifft. Wenn du nur die Buchstaben benötigst, mußt du von Hand zählen (
for(i=0;isaplha(input[i]);++i)..
).(und wenn du sowieso in einer Schleife über den gesamten String laufen willst, ist die Abfrage "input[i]!='\0'" effektiver als "i<strlen(input)")