Entwickler-Ecke

Algorithmen, Optimierung und Assembler - String umkehren


Breakdown_Chris - Sa 20.06.09 11:45
Titel: String umkehren
Hallo Mitglieder des Delphi-Forums,

ich hätte ein Anliegen. Mein Info Lehrer hat mir zum Zeitvertreib eine Aufgabe gegeben, das ich ein Programm schreiben soll, was einen eingegebenen Text rückwärts wieder ausgibt. Leider hab ich keinerlei Ideen wie ich an die Sache rangehen soll. Ich hoffe hier auf ein paar Tipps.


Mfg


JüTho - Sa 20.06.09 11:54

Hallo und :welcome:

Bitte ändere den Titel: wo ist in deiner Frage von einem "Grid" die Rede - egal ob StringGrid oder DataGrid oder was auch immer? Einfach deinen ersten Beitrag mit dem Schere-Button aufrufen und den Titel neu formulieren.

Zum Problem: Ein String ist eine Zeichenkette, also eine Menge von Zeichen. Die musst du mit einer Schleife von hinten nach vorne durchgehen und jedes einzelne Zeichen in einen neuen String eintragen.

Ist das wirklich so schwer, auf dieses Vorgehen zu kommen, dass du nach Tipps suchst? :roll: Jürgen


Breakdown_Chris - Sa 20.06.09 12:09

Hallo Jürgen,
erst einmal Danke für deine schnelle Antwort. Ich hatte mir sowas schon fast gedacht, bloss stellt sich mir die Frage, wie soll der Befehl für das umkehren aussehen? Im Unterricht hatten wir das bis jetzt ja noch nicht gemacht. Könnte man da ein Sortierverfahren anwenden oder ist das völliger Schwachsinn?


Marc. - Sa 20.06.09 12:28

Die wohl einfachste Variante wäre es, die Funktion ReverseString aus der StrUtils zu verwenden.
Manuell müsstest du nun, wie user profile iconJüTho bereits erwähnte, die Zeichen (Chars) entsprechend vertauschen.


JungerIslaender - Sa 20.06.09 14:00

Ich kann dir ja mal einen kleinen tipp geben, wenn dir das so nicht weiterhilft:
1.Länge des Strings rausfinden,
2.in einer schleife die buchstaben von hinten in einem neuen string nach vorne "packen"

Das wäre so meine idee hoffe es hilf dir^^


Andreas L. - Sa 20.06.09 15:43


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
function ReverseString(AValue: String):String;
var
  i: Integer;
begin
  Result := '';
  for i := Length(AValue) -1 downto 0 do
    Result := Result + AValue[i];
end;


Blackheart666 - Sa 20.06.09 15:44

user profile iconJungerIslaender hat folgendes geschrieben Zum zitierten Posting springen:
Ich kann dir ja mal einen kleinen tipp geben, wenn dir das so nicht weiterhilft:
1.Länge des Strings rausfinden,
2.in einer schleife die buchstaben von hinten in einem neuen string nach vorne "packen"

Das wäre so meine idee hoffe es hilf dir^^




user profile iconJüTho hat folgendes geschrieben Zum zitierten Posting springen:
Hallo und :welcome:

Zum Problem: Ein String ist eine Zeichenkette, also eine Menge von Zeichen. Die musst du mit einer Schleife von hinten nach vorne durchgehen und jedes einzelne Zeichen in einen neuen String eintragen.


JungerIslaender - Sa 20.06.09 15:45

Genial: jetzt hast du ja schon die Arbeit vorweg genommen... :D


Andreas L. - Sa 20.06.09 15:47

user profile iconJungerIslaender hat folgendes geschrieben Zum zitierten Posting springen:
Genial: jetzt hast du ja schon die Arbeit vorweg genommen... :D


Naja, bin heut gut gelaunt ;-)


jakobwenzel - Sa 20.06.09 15:48

@Andreas L.: Das is aber nich soo toll, dass der String immer wieder verlängert wird, wenn doch die Endlänge schon bekannt ist...

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
function ReverseString(const AText: string): string;
var
  I: Integer;
  P: PChar;
begin
  SetLength(Result, Length(AText));
  P := PChar(Result);
  for I := Length(AText) downto 1 do
  begin
    P^ := AText[I];
    Inc(P);
  end;
end;


Andreas L. - Sa 20.06.09 15:48

user profile iconjakobwenzel hat folgendes geschrieben Zum zitierten Posting springen:
@Andreas L.: Das is aber nich soo toll, dass der String immer wieder verlängert wird, wenn doch die Endlänge schon bekannt ist...

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
function ReverseString(const AText: string): string;
var
  I: Integer;
  P: PChar;
begin
  SetLength(Result, Length(AText));
  P := PChar(Result);
  for I := Length(AText) downto 1 do
  begin
    P^ := AText[I];
    Inc(P);
  end;
end;


Klar, aber welchen der beiden Codes wird er eher verstehen? :D


FinnO - Sa 20.06.09 16:21

wohl eher den hier?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
uses
  ...,strUtils;

//...

begin
  myString := reverseString(myString);
end;