Autor Beitrag
HouseGemacht
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18
Erhaltene Danke: 1

Win XP, Win7 Ultimate, Linux

BeitragVerfasst: 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



BeitragVerfasst: Mo 08.11.10 13:45 
Neuere Delphiversioen kennen die Funktion ReverseString.
HouseGemacht Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18
Erhaltene Danke: 1

Win XP, Win7 Ultimate, Linux

BeitragVerfasst: 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



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18
Erhaltene Danke: 1

Win XP, Win7 Ultimate, Linux

BeitragVerfasst: Mo 08.11.10 13:52 
Es soll aber direkt im Edit angezeigt werden.
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: 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



BeitragVerfasst: Mo 08.11.10 14:03 
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Mo 08.11.10 16:22 
user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden 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 user profile iconLuckie schreiben wollte, ist:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 107
Erhaltene Danke: 15

win 10

BeitragVerfasst: 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?

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Mo 08.11.10 18:24 
user profile iconbole hat folgendes geschrieben Zum zitierten Posting springen:
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:

ausblenden 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;        //wird 1x ausgeführt
  SetLength(result, Len - 1);  //wird 1x ausgeführt
  for i := Len - 1             //wird 1x berechnet
    downto 1 do                //wird Length(S) mal überprüft
    result[Len - i] := S[i];   //wird Length(S)x ausgeführt
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: 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



BeitragVerfasst: Mo 08.11.10 21:08 
user profile iconHidden hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
SetLength(Result, Length(s));
Result := '';
Lese ich falsch? :P

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 107
Erhaltene Danke: 15

win 10

BeitragVerfasst: 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... :)

_________________
ein programm macht nicht das was du willst sondern was du schreibst!