Bei Caesarverschluesselung kommt entschluesseltes wort doppelt
-
Hi Leute ich hab ein kleines Problem ich habe eine Caesarverschluesselung geschrieben die auch wunderbar funktioniert nur wenn ich nach dem verschluesseln direkt wieder entschluessel dann bringt mir mein Programm das entschluesselte wort 2 mal. habe es schon mit cin.ignore() versucht aber es ist ja keine Tastatur eingabe, sprich es geht so nicht
und ich komm nicht drauf wie ich das Wort aus dem speicher bekomme(ich denke es ist noch im cash denn wenn ich nur ein Wort entschluessel kommt es auch nur 1 mal). Hab auch schon meinen Kumpel Google angehauen aber ich denk mit den falschen schlagwoertern denn der sag er weiß es auch nicht.
schonmal vielen dank im voraus.mfg Zwoertsch
-
Zeig mal Code, sonst lässt sich da wenig zu sagen.
-
#include <iostream> #include <vector> #include <string> #include <locale> #include <map> int main() { int wahl = 0; std::string klartext = ""; std::string geheimtext = ""; std::map<std::string, std::map<char, char>> cipher; int zähler = 0; int schiebung = 0; cipher["encrypt"] = std::map<char, char>(); cipher["decrypt"] = std::map<char, char>(); //cipher.insert(std::make_pair("encrypt", )); //cipher.insert(std::make_pair("decrypt", std::map<char, char>())); std::cout << "CAESAR VERSCHLUESSELUNG" << std::endl; std::cout << ">>>>>>>>>>>>>>>>>>>>>>>" << std::endl; do { std::cout << "Bitte waehlen Sie : \n\n" << std::endl; std::cout << "Verschluesseln [1]" << std::endl; std::cout << "Entschluesseln [2]" << std::endl; std::cout << "Abbrechen [3]" << std::endl; std::cin >> wahl; switch (wahl) { case 1: std::cout << "Bitte geben sie Ihren Text ein nur buchstaben von A-Z max 50 ohne Leerzeichen\n"; std::cin >> klartext; std::cout << "wieviele Stellen soll geschoben werden?\n"; std::cin >> schiebung; for (unsigned short int idx = 0; idx <= 25; idx++) { char c1 = static_cast<char>(idx + 65); char c2 = static_cast<char>(((idx + schiebung) % 26) + 65); cipher["encrypt"][c1] = c2; cipher["decrypt"][c2] = c1; //cipher["encrypt"].insert(std::make_pair(c1, c2)); //cipher["decrypt"].insert(std::make_pair(c2, c1)); } for (int x = 0; x < klartext.size(); x++) { geheimtext += cipher["encrypt"][klartext[x]]; // klartext += cipher["decrypt"][geheimtext[x]]; } std::cout << geheimtext << std::endl; std::cin.ignore(); break; case 2:std::cout << "Bitte geben sie Ihren Geheimtext ein, nur Buchstaben von A-Z max. 50 ohne Leerzeichen\n"; std::cin >> geheimtext; std::cout << "wieviele Stellen soll geschoben werden?\n"; std::cin >> schiebung; for (unsigned short int idx = 0; idx <= 25; idx++) { char c1 = static_cast<char>(idx + 65); char c2 = static_cast<char>(((idx + schiebung) % 26) + 65); cipher["encrypt"][c1] = c2; cipher["decrypt"][c2] = c1; //cipher["encrypt"].insert(std::make_pair(c1, c2)); //cipher["decrypt"].insert(std::make_pair(c2, c1)); } for (int x = 0; x < geheimtext.size(); x++) { klartext += cipher["decrypt"][geheimtext[x]]; // klartext += cipher["decrypt"][geheimtext[x]]; } std::cout << klartext << std::endl; std::cin.ignore(); break; default: std::cout << "ENDE" << std::endl; } } while (wahl < 3); std::cout << "ENDE" << std::endl; };edit: so siehts schon besser aus

-
Wenn du das Ergebnis mit "+=" aufbaust, dann solltest du "klartext" bzw. "geheimtext" vor der "+=" Schleife auf "" setzen.
Sonst bleibt da drin stehen was auch immer vorher drin stand.ps: Bitte guck dir an wie man die [code] Tags korrekt verwendet.
-
alles klar danke dir und guten morgen zwoertsch sag ich nur

und zu den code tags jo hab ich dann auch gesehen das das nicht so richtig macht was es soll aber ist ja mein erstes mal ich hoffe das wird verziehen
PROBLEM GELÖST
DANKE
mfg Zwoertsch
-
Zwoertsch schrieb:
zu den code tags jo hab ich dann auch gesehen das das nicht so richtig macht was es soll aber ist ja mein erstes mal ich hoffe das wird verziehen

Leuten die dazulernen wird sehr viel verziehen
