Text Verschlüsseln
-
Morgen,
Ich hab mir mal gedacht ich versuch mir ein kleines Text Verschlüsselungs Programm zu machen und das kam dabei raus

Funktioniert auch gut.
Verschlüsseln:
#include <iostream> using namespace std; int main() { string schluessel[256]; int i; char test; char zeichen[4]; for (i=0 ; i<2; i++) { cout<<"2 Zeichen eingeben: "; cin>>zeichen[i]; } for (i=0 ; i<2 ; i++) { if (zeichen[i] == 'a') { schluessel[i] = "B"; } if (zeichen[i] == 'b') { schluessel[i] = "C"; } } for (int i=0;i<2;i++) { cout<<"schluessel "<<i<<"ist: "<<schluessel[i]<<"\n"; } return 0; } //---------------------------------------------------------------------------Entschlüsseln:
#include <iostream> using namespace std; int main() { string schluessel[256]; int i; char test; char zeichen[4]; for (i=0 ; i<2; i++) { cout<<"2 Zeichen eingeben: "; cin>>zeichen[i]; } for (i=0 ; i<2 ; i++) { if (zeichen[i] == 'b') { schluessel[i] = "A"; } if (zeichen[i] == 'c') { schluessel[i] = "B"; } } for (int i=0;i<2;i++) { cout<<"Entschlusselt "<<i<<"ist: "<<schluessel[i]<<"\n"; } return 0; } //---------------------------------------------------------------------------Jetzt will ich das aber so machen.
Der User gibt eine Zeichen Kette ein:
z.b.
ab
Die Verschlüsselung für ab soll lauten BA
Wenn der User BA im Verschlüsselungs Programm eingibt so soll dieses ab ausgeben.
Ich will halt nicht das der User jedes Zeichen einzelt eingeben muss hat da wer eine Idee wie das gehen könnte?
-
normalerweise würde ich sagen, guck dir mal die ascii-tabelle an....
aber da dir anscheinend ein wenig das prinzip bzw. konzept fehlt erkläre ich mal etwas mehr.
die ascii tabelle besitzt eine größe von einem byte und kodiert chars. intern werden chars wie ints behandelt.
das heißt, wenn du einem int einem char zuweist, dann bekommt der eine zahl zwischen 0 und 255 oder so zugewiesen. a hätte bsp.-weise die nummer 65 oder so (hab das nicht im kopf)so nun könntest dus umdrehen, du fragst den user nach ner zahl und shiftest dann jedes zeichen des cstrings um diese zahl. das erspart die deine ifs und du hast nen netten anfängerkodierer.
-
en ig ma schrieb:
Ich will halt nicht das der User jedes Zeichen einzelt eingeben muss hat da wer eine Idee wie das gehen könnte?
ja.
std::string text; std::cin >> text;//edit
dgrat schrieb:
so nun könntest dus umdrehen, du fragst den user nach ner zahl und shiftest dann jedes zeichen des cstrings um diese zahl.
shiften is nicht so gut, das lässt sich nicht umkehren.
besser wäre addieren, subdrahieren oder xor-en.
-
wandrer schrieb:
en ig ma schrieb:
Ich will halt nicht das der User jedes Zeichen einzelt eingeben muss hat da wer eine Idee wie das gehen könnte?
ja.
std::string text; std::cin >> text;Oder noch besser, wenn es nicht nur ein Wort, sondern ein ganzer Satz sein soll:
std::string line; std::getline(std::cin, line);C++ Referenz: http://www.cplusplus.com/reference/
Zudem solltest du dich wohl noch etwas in C++ über. "C++ Primer" oder "Thinking in C++" kaufen/anschauen

Grüssli
-
@enigma: wenn du den text unsystematisch verschlüsseln willst (also ohne +,-,xor etc., also ab -> BA ) solltest du eine tabelle mit 256 einträgen schreiben, in der steht welches zeichen durch welches ersetzt wird.
könnte ein array, oder vector sein.std::vector tabelle; tabelle.resize(256); tabelle['a'] = 'B'; tabelle['b'] = 'A';in deinem beispiel würde man sie dann so einsetzen:
schluessel[i] = tabelle[ zeichen[i] ];//edit:
halt nein, kommando zurück, du hast da irgendwas komisches gemacht.string schluessel[256]; // sollte vermutlich string schluessel(256); // heißen, wenn du einen string haben willst der 256 zeichen lang istoder is das deine tabelle? ne...