Entwickler-Ecke
Sonstiges (Delphi) - Zahlen Andersrum Ausgeben?
HouseGemacht - Mo 08.11.10 13:41
Titel: Zahlen Andersrum Ausgeben?
Ich habe mal eine Frage: Wie kann man in einem Edit die Zahlen "Falschrum" ausgeben lassen.
Wenn ich also Hallo im Edit eingebe kommt ollaH raus?
Über antworten und Codeschnipzel freue Ich mich sehr.
MfG,
HouseGemacht
Delete - Mo 08.11.10 13:45
Neuere Delphiversioen kennen die Funktion ReverseString.
HouseGemacht - Mo 08.11.10 13:48
Ich Arbeite, Bedingt durch den Betrieb (Praktikum) mit Delphi 7 Enterprise, und nehme an es gehört nicht zu den neuerren versionen!?!
Delete - Mo 08.11.10 13:49
Dann selber schreiben. Mit einer for-Schleife von hinten nach vorne über die Zeichen der Zeichenkette laufen und die Zeichen neu zusammensetzen. Sollte in fünf Minuten programmierbar sein.
HouseGemacht - Mo 08.11.10 13:52
Es soll aber direkt im Edit angezeigt werden.
Nersgatt - Mo 08.11.10 13:59
Und wo genau ist das Problem?
Hidden - Mo 08.11.10 16:22
Luckie hat folgendes geschrieben : |
Delphi-Quelltext 1: 2:
| SetLength(Result, Length(s)); Result := ''; | |
Lese ich falsch? :P
Auch, sollte Das Argument dringendst als
const s: String deklariert werden, auch wenn man nicht speziell auf's Optimieren auf ist. Sonst wird vorher alles noch einmal zwischenkopiert da der Compiler glaubt, es wird schreibend darauf zugegriffen.
Ich glaube, was
Luckie schreiben wollte, ist:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| function ReverseString(const S: String): String; var i: Integer; Len: Integer; begin Len := Length(S) + 1; SetLength(result, Len - 1); for i := Len - 1 downto 1 do result[Len - i] := S[i]; end; |
E: Oh, das ist gerade die eine optimierte Version^^
lg,
bole - Mo 08.11.10 18:12
Hallo
Wieso rechnest Du Len:=Lenght(S)+1 und nachher bei jedem gebrauch der Variable Len-1.
Kann man das ganze +/- nicht auch weglassen oder hat das einen bestimmten Zweck?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| function ReverseString(const S: String): String; var i: Integer; Len: Integer; begin Len := Length(S) + 1 SetLength(result, Len - 1); for i := Len - 1 downto 1 do result[Len - i] := S[i]; end; |
Gruss
Bole
Hidden - Mo 08.11.10 18:24
bole hat folgendes geschrieben : |
Wieso rechnest Du Len:=Lenght(S)+1 und nachher bei jedem gebrauch der Variable Len-1.
Kann man das ganze +/- nicht auch weglassen oder hat das einen bestimmten Zweck? |
Wenn ich das machen würde, könnte man das: Ja :zwinker:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| function ReverseString(const S: String): String; var i: Integer; Len: Integer; begin Len := Length(S) + 1; SetLength(result, Len - 1); for i := Len - 1 downto 1 do result[Len - i] := S[i]; end; |
In der markierten Zeile wird allerdings keine Konstante zu Len addiert, und die wollte ich mit dem +1 möglichst einfach halten, denn sie wird häufig ausgeführt.
Wo ich die 1 addiere bzw. abziehe, ist letzten Endes egal: ja. Was ich hier gemacht habe, ist eine
Indexverschiebung [
http://de.wikipedia.org/wiki/Indexverschiebung]. Die +1 aus dem
Length(S) mal ausgeführten Code habe ich entfernt, dafürmuss sie im 1x ausgeführten Code stehen.
Vielleicht hätte ich die Variable danach nicht mehr
Len nennen sollen, das suggeriert sie habe Length(S) eingespeichert.
Grüße,
Tranx - Mo 08.11.10 18:53
Ein programmtechnisch sehr anspruchsvolles Beispiel, weil mit Rekursiven Prozeduren gearbeitet wird, siehst Du im folgenden Beispiel (im Thread weiter unten)
http://www.delphi-forum.de/viewtopic.php?t=102421
Möglicherweise nicht optimiert. Aber das ist bei einer Zahl, welche aus i.d.Regel nur 5 - 10 Zeichen besteht, auch nicht unbendingt notwendig, oder? ;)
Delete - Mo 08.11.10 21:08
Ich hatte das nur mal schnell in den Editor geklimpert. Und ich hatte das Problem, dass in Result immer Müll drin stand. Mir ist da auf die schnelle keine bessere Lösung eingefallen. Eventuell hätte man mir FillChar arbeiten können.
bole - Mo 08.11.10 21:43
Ich sollte mal meine Brille putzen :shock:
Ich habe erst jetzt gesehen, dass es ja result[Len - i] und nicht result[Len - 1] heisst...
Aber i und 1 sieht ja auch seeeehr ähnlich aus... :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!