Wie sieht denn dein Code nun aus?
Wäre ja nicht schlecht, wenn wir dennoch den Fehler finden und du dabei lernst/erfährst warum es nicht ging.
Hast du beim StringReplace auch den Rückgabewert übernommen?
Ist oftmals ein/DER Fehler, warum da nix passiert
Delphi-Quellcode:
VAR S: AnsiString;
I: Integer;
B, Schl: Byte;
BEGIN
// ALLES in Großbuchstaben umwandeln
S := AnsiUpperCase(edein.Text);
// Umlaute ersetzen
S := StringReplace(S, 'Ä', 'AE', [rfReplaceAll]);
S := StringReplace(S, 'Ö', 'OE', [rfReplaceAll]);
S := StringReplace(S, 'Ü', 'UE', [rfReplaceAll]);
S := StringReplace(S, 'ß', 'SS', [rfReplaceAll]);
// nicht erlaubte Zeichen rauslöschen
FOR I := Length(S) DOWNTO 1 DO
IF NOT (S[I] IN [' ', 'A'..'Z']) THEN
Delete(S, I, 1);
// Schlüssel holen
Schl := StrToInt(lbein.Text);
FOR I := 1 to Length(S) DO
// das Leerzeichen wird nicht verarbeitet (war doch bei Cäsar so?)
IF S[I] IN ['A'..'Z'] THEN
BEGIN
// bei Cäsar werden nur die Buchstaben in sich verschoben
// Buchstabe in Zahl umwandeln und auf den Nullpunkt verschieben
B := Ord(S[I]) - Ord('A');
// Schlüssel zurechnen und den Zahlenbereich anpassen
B := (B + Schl) MOD 26;
// Zahl wieder in den Buchstabenbereich verschieben und in ein Zeichen Wandeln
S[I] := Chr(B + Ord('A'));
END;
edaus.Text := S;
END;
Buchstabe ... auf den Nullpunkt verschieben
ist nur, damit sich leichter Rechnen läßt, da es sonst etwa so aussehen würde:
Delphi-Quellcode:
VAR B, Schl: Integer;
Schl := StrToInt(lbein.Text);
IF S[I] IN ['A'..'Z'] THEN
BEGIN
// bei Cäsar werden nur die Buchstaben in sich verschoben
// Buchstabe in Zahl umwandeln
B := Ord(S[I]);
// Schlüssel zurechnen und den Zahlenbereich anpassen
B := B + Schl;
WHILE B < Ord('A') DO A := A + 26;
WHILE B > Ord('Z') DO A := A - 26;
// Zahl wieder in den Buchstabenbereich verschieben und in ein Zeichen Wandeln
S[I] := Chr(B);
END;