Autor |
Beitrag |
HouseGemacht
      
Beiträge: 18
Erhaltene Danke: 1
Win XP, Win7 Ultimate, Linux
|
Verfasst: Mo 08.11.10 13:41
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
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 08.11.10 13:45
Neuere Delphiversioen kennen die Funktion ReverseString.
|
|
HouseGemacht 
      
Beiträge: 18
Erhaltene Danke: 1
Win XP, Win7 Ultimate, Linux
|
Verfasst: 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!?!
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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 
      
Beiträge: 18
Erhaltene Danke: 1
Win XP, Win7 Ultimate, Linux
|
Verfasst: Mo 08.11.10 13:52
Es soll aber direkt im Edit angezeigt werden.
|
|
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Mo 08.11.10 13:59
Und wo genau ist das Problem?
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 08.11.10 14:03
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| function ReverseString(s: String): string; var i: Integer; begin SetLength(Result, Length(s)); Result := ''; for i := Length(s) downto 1 do begin Result := Result + s[i]; end; end; |
Weitere, optimierte Versionen findest du hier: www.delphipraxis.net...elphi-versionen.html
Für diesen Beitrag haben gedankt: HouseGemacht
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Mo 08.11.10 16:22
Luckie hat folgendes geschrieben : | Delphi-Quelltext 1: 2:
| SetLength(Result, Length(s)); Result := ''; | |
Lese ich falsch?
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,
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
bole
      
Beiträge: 107
Erhaltene Danke: 15
win 10
|
Verfasst: 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
_________________ ein programm macht nicht das was du willst sondern was du schreibst!
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: 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
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. 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,
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
Tranx
      
Beiträge: 648
Erhaltene Danke: 85
WIN 2000, WIN XP
D5 Prof
|
Verfasst: 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)
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? 
_________________ Toleranz ist eine Grundvoraussetzung für das Leben.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 08.11.10 21:08
|
|
bole
      
Beiträge: 107
Erhaltene Danke: 15
win 10
|
Verfasst: Mo 08.11.10 21:43
Ich sollte mal meine Brille putzen
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... 
_________________ ein programm macht nicht das was du willst sondern was du schreibst!
|
|