Home » Tipps & Tricks » Object Pascal » Strings » String umkehren

String umkehren

Dieser Tipp zeigt Möglichkeiten auf, mit denen ein String umgekehrt werden kann.

Iterative Variante

Die iterative Variante benutzt eine einfache Schleife, in der der String umgekehrt wird.Dabei wird jedes einzelne Zeichen in umgekehrter Reihenfolge in die Rückgabe-Variable kopiert:

function ReverseString(const AValue: string): string;
var
  Len: Integer;
  Src: Integer;
begin
  Len := Length(AValue);
  SetLength(Result, Len);
  for Src := 1 to Len do
    Result[Src] := AValue[Len - Src + 1];
end;

Rekursive Variante

Die rekursive Variante löst dieses große Problem, indem sie es in immer kleiner werdende Probleme unterteilt, bis sie direkt lösbar sind – dies erreicht sie, indem sie sich selbst aufruft.Das große Problem besteht darin, alle Zeichen umzukehren: Als Ganzes ist dies nicht möglich, aber sobald das große Problem in kleinere zerlegt wird, ist es einfach, sie zu lösen.Es wird also versucht, das Problem insoweit zu reduzieren, dass es nur noch zwei Teile bzw. Elemente gibt, welche direkt vertauscht werden können.Folgende Funktion arbeitet nach dem rekursivem Prinzip:

function ReverseString(const AValue: string): string;
var
  APart1, APart2: string;
begin
  if Length(AValue) > 1 then
  begin
    APart1 := AValue[1]; //Der erste Teil
    APart2 := ReverseString(Copy(AValue, 2, Length(AValue) - 1)); //Der zweite Teil
    Result := APart2 + APart1; //Vertauschung und Zusammführung der beiden Teile
  end;
end;

Ab Delphi 6 steht bereits eine gleichnamige Funktion zur Verfügung.

Auf ein Palindrom prüfen

Wenn ein String umgedreht wurde, kann sehr leicht geprüft werden, ob es sich dabei um ein Palindrom handelt. Ein Palindrom ist ein Wort, welches sowohl vorwärts als auch rückwärts gelesen identisch ist. Bekannte Beispiele sind ‚anna‘ oder ‚otto‘.Es muss also nur das Wort umgedreht und geprüft werden, ob es mit dem Ausgangswort übereinstimmt.Folgende Funktion testet nach dem beschriebenem Verfahren, ob es sich um ein Palindrom handelt:

function IsPalindrom(const AWord: string): Boolean;
begin
  Result := (AWord = ReverseString(AWord)); //Ist das Wort mit dem umgedrehten identisch?
end;