Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi String umdrehen (https://www.delphipraxis.net/158701-string-umdrehen.html)

rollstuhlfahrer 28. Feb 2011 19:17

AW: String umdrehen
 
Zitat:

Zitat von Aphton (Beitrag 1084903)
@Himitsu - ja, da hast du Recht! Das kann zu Problemen führen.
Was das "Move" angeht - ich finde, so dürfte das schneller sein?!

Ab D2009 (mit Unicode) führt das zu Problemen. Man kann diese Version aber etwas abändern und dann wird sie in allen weiteren Delphi-Versionen funktionieren (auch mit UTF-32):
Delphi-Quellcode:
Move( Word[1], Result[i], p * SizeOf(Char));
.
Das SizeOf(Char) ist der Multiplikator. Vor D2009 ist der 1 (weil 1 Zeichen -> 1 Byte), danach ist der 2 (weil 1 Zeichen -> 2 Bytes oder so), auf jeden Fall ist der dann zu der Delphi-Version passend und es sollte nicht zu Problemen kommen.

Bernhard

himitsu 28. Feb 2011 22:18

AW: String umdrehen
 
Allerdings muß man nicht immer alles extremst optimieren,
denn soo oft wird diese Funktion bestimmt nicht aufgerufen, als daß da 'ne Microsekunde wirklich auffällt ... in soeinem Fall lieber einfachen Code verwenden, da weniger fehleranfällig und übersichtlicher.

-187- 1. Mär 2011 05:42

AW: String umdrehen
 
Tja grade wenn er eine Aufgabe für die Schule bearbeitet wird er glaube ich mit Move nicht glücklich werden :)

Das sind einfach keine Basics mehr...

dor557 6. Mär 2011 17:57

AW: String umdrehen
 
Hier mal meinen Senf dazu... Habe das getestet. Ist sicherlich Fähig zu optimieren :)

Ich benutze immer eine Funktion die sich Explode nennt da ich viel mit arrays arbeite ;)

hier mal mein Code :

Delphi-Quellcode:
  TSTringdynarray = array of String;
var
  Form1: TForm1;
  WechselText : TStringDynArray;

function Explode(const Separator, S: string; Limit: Integer = 0): TStringDynArray;
var
  SepLen: Integer;
  F, P: PChar;
  ALen, Index: Integer;
begin
  SetLength(Result, 0);
  if (S = '') or (Limit < 0) then Exit;
  if Separator = '' then
  begin
    SetLength(Result, 1);
    Result[0] := S;
    Exit;
  end;
  SepLen := Length(Separator);
  ALen := Limit;
  SetLength(Result, ALen);

  Index := 0;
  P := PChar(S);
  while P^ <> #0 do
  begin
    F := P;
    P := AnsiStrPos(P, PChar(Separator));
    if (P = nil) or ((Limit > 0) and (Index = Limit - 1)) then P := StrEnd(F);
    if Index >= ALen then
    begin
      Inc(ALen, 5);
      SetLength(Result, ALen);
    end;
    SetString(Result[Index], F, P - F);
    Inc(Index);
    if P^ <> #0 then Inc(P, SepLen);
  end;
  if Index < ALen then SetLength(Result, Index);
end;

procedure TForm1.Button1Click(Sender: TObject);
var I : Integer;
begin
 Edit2.text := '';
  WechselText := Explode(' ',Edit1.text);
  for I := 0 to Length(WechselText) - 1 do
  begin
    WechselText[i] := ReverseString(Wechseltext[i]);
    Edit2.text := Wechseltext[i] + ' ' + Edit2.text;
  end;
end;
Hoffe das ich jetzt nicht deine Hausaufgaben gemacht habe :wink:

gruss Sascha

roboter202 6. Mär 2011 19:56

AW: String umdrehen
 
Hallo,

umdrehen geht auch so
Delphi-Quellcode:
for i := 1 to length(input) do
  begin
  output := output + input[length(input)-(i-1)]
  end;

Warum immer so Kompliziert :?:

Aphton 6. Mär 2011 19:59

AW: String umdrehen
 
Das ist sehr unperformant, denn du fügst einem String einen weiteren String hinzu, was zu einem stetigen Erweitern und somit Speicher neu allozieren führt, das ja bekannterweise langsam ist!

roboter202 6. Mär 2011 20:17

AW: String umdrehen
 
Hallo,

Zitat:

Zitat von Aphton (Beitrag 1086295)
Das ist sehr unperformant, denn du fügst einem String einen weiteren String hinzu, was zu einem stetigen Erweitern und somit Speicher neu allozieren führt, das ja bekannterweise langsam ist!

Das mag sein allerdings würde es funktionieren und wenn man nicht gerade von einem string mit millionen von zeichen ausgeht würde es nicht merklich länger dauern :stupid:

Aphton 6. Mär 2011 22:48

AW: String umdrehen
 
Klar, ich habe ja die Funktionalität gar nicht bezweifel ;)
Aber wissen sollte man das schon, deshalb habe ich es auch erwähnt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:02 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz