Chiffrierung
-
Alexander Sulfrian schrieb:
...else vor der 2. if ..

*schäm*
Grüße Joe_M.
-
uluru:
Die Variante mit dem Array ist eher uncool, weil viel zu starr. Sieh dir mal dieses Beispiel an:String str = "AbCDE FgHIJ-KLmNo, PQRsT+UVw XYz."; int rot = 1; // Verschiebefaktor for (int i = 1; i <= str.Length(); i++) { int min, max; unsigned char ch = str[i]; if (isupper(ch)) // Grossbuchstaben { min = 65; // 'A' max = 90; // 'Z' } else if (islower(ch)) // Kleinbuchstaben { min = 97; // 'a' max = 122; // 'z' } else continue; // Nicht-Buchstaben überspringen ch += rot; // Buchstaben "verschieben" if (ch > max) // Ende des Alphabets beachten ch = (min - 1) + (ch - max); str[i] = ch; } Caption = str;
-
@ jansen: vielleicht ist meine Methode für die die etwas in C++ drauf haben uncool, aber ich finde ich genau richtig für mich, da ich immer einen Überblick habe, welcher Buchstabe mit welchem vertauscht wird.
Nun habe ich aber ein weiteres Problem mit meinem Code
.
Da ich nicht nur eine Zeile, sondern auch einen ganzen Text chiffrieren möchte, hab ich anstatt Edit1 RichEdit1 genommen. Doch leider funktioniert das dann irgendwie nicht mehr, weil da garnichts passiert. Als Warnung erhalte ich im Editor: "Conversion may lose significant digits".

Kann mir einer sagen was ich machen muss, damit mein Code auch in einem RichEdit funktioniert?
Ich selber habe das so versucht:
1. RichEdit1->Text
2. RichEdit1->Lines->Strings[0] //hier ist es ja nur die erste Zeile, dass weiss ich auch, war nurn verzweifelter Versuch
-
Hi,
zeig mal den Code wie du die einzelnen Zeichen ausliest?MfG
Alexander Sulfrian
EDIT: Ach ich sehe schon....
Wo kommt denn der Fehler? Welche Zeile?
-
Das ist eigentlich ja kein Fehler, das da Programm ja auch generirt wird und nur nichts tut, wenn ich auf den Button1 drücke. Die Warnung wird einfach so ausgespukt in dieser Zeile:
Ausgang[i]=feld[Ausgang[i]];
-
Hi,
das kann ich nicht nachvollziehen...Ich hab einfach den Code von dir auf der letzten Seite übernommen und Edit1 durch RichEdit1 ersetzt und es hat geklappt....
Du solltest vielleicht diesen Code hier:
for (int i=1; i <= Ausgang.Length(); i++) Ausgang[i] = feld[Ausgang[i]];durch folgendes ersetzten:
for (int i=1; i <= Ausgang.Length(); i++) if (feld[Ausgang[i]] != 0) Ausgang[i] = feld[Ausgang[i]];Dadurch wird immer erst überprüft ob der Char einen Ersatz hat...
Sonst wird ein Char der nicht im feld mit einem Ersatz definiert ist durch 0 ersetzt werden! Und da ein AnsiString ein Null-terminierter String ist (d.h. bei 0 aufhört) würde der String womöglich etwas kurz werden....MfG
Alexander Sulfrian
PS: Aber auch hier wäre der Debugger evtl. hilfreich gewesen....
-
@ Alexander Sulfrian:
Jo danke jetzt funzt das auch mit RichEdit

-
uluru schrieb:
@ jansen: vielleicht ist meine Methode für die die etwas in C++ drauf haben uncool
Das hat absolut nichts mit besonderen C++-Kenntnissen zu tun, es geht um's Prinzip. Du solltest dich bemühen, deine Programme generell so zu entwerfen und die Funktionen im Besonderen so zu schreiben, dass sie möglichst flexibel, d.h. für unterschiedliche Fälle einsetzbar sind.
-
Keine Frage, euer Code hat viele Vorteile, nur 2 Dinge haben mich zu meinem Array geführt:
1. Leicht zu vertehen (was er ja wollte)
2. Erlaubt auch eine flexible Mischung der einzelnen Buchstaben, eben nicht nur starr um 1, 2 oder auch mehrere Stellen verschoben