Wort verschlüsseln
-
Hallo zusammen,
ich wollte ein Programm schreiben, welches ein String untersucht, welcher nur aus Buchstaben (groß/klein) besteht. Jeder einzelner Buchstabe soll nun mit dem darauf folgenden Buchstaben im Alphabet ersetzt werden. (z.B. A -> B, a->b, sowie Z->A).
Hier bei möchte ich lediglich mit Call by Value arbeiten.Mein Problem ist das mir kein Befehl einfällt, mit dem ich z.B. ein String verändern kann. Habe es mit einer Hilfsvariablen versucht, sowie mit string.replace aber irgendwie funktioniert es nicht. Wenn ich den text wieder zurückgebe ist er immer noch unverändert.
Vielleicht kann mir da jemand weiterhelfen.
Gruß JohnHier der Code:
td::string encode(std::string text){ std::string new_text[text.length()]; for(int i= 0; i<text.length();i++){ if(text[i] >= 65 && text[i] <= 89){ text[i]+1 = new_text[i]; } if(text[i]== 90){ text[i]-25; } if(text[i] >= 97 && text[i] <= 122){ text[i]+1; } if(text[i] == 122){ text[i]-25; } } std::string result = text; return result; }
-
@Johnny01 sagte in Wort verschlüsseln:
std::string new_text[text.length()];
Das ist ein Array von Strings! Das ist nicht, was du willst (und auch kein gültiges Standard-C++, weil das erfordert, dass Arrays bekannte Längen haben)
Zu deinem Problem: vereinfache es. Schreibe als erstes eine Funktion, die nur ein einziges Zeichen umwandeln kann. So in der Art:
char encode_char(char c) { if (c == 'Z') return 'A'; if (c == 'z') return 'a'; if ((c >= 'A' && c <= 'Y') || (c >= 'a' && c <= 'y')) return c + 1; return c; }
Und dann einfach zusammensetzen für den String:
std::string encode(std::string text) { for (auto &c : text) c = encode_char(c); return text; }
Tipp dabei: schreibe
'A'
statt65
usw. Mit solchen wilden Zahlen im Code kann niemand was anfangen.
-
Schalt mal die Compilerwarnungen auf einen hohen Level und beachte auch die Warnungen und behebe deren Ursache.
Zeilen wie
text[i]-25;
sollten "Code ohne Effekt" oder Ähnliches ergeben, denn das Ergebnis der Berechnung wird nirgends abgespeichert.Wozu hast du new_text und result, wenn du doch alles in text ändern möchtest?