![]() |
Funktion um Stringlänge zu ermitteln
Hi :)
Natürlich kenne ich length... aber ein Freund von mir weiss nicht, wie man eigene Funktionen macht und wollte deshalb eine length()-"imitation" schreiben. Ich hab ihm meinen Ansatz genannt und er fragte, ob ich den mal machen könnte. Hab ich:
Delphi-Quellcode:
Aber das liefert sehr fragwürdige Zahlen.
function TForm1.GetLength(s: string): integer;
var i, count: integer; begin i := 1; count := 0; while(TRUE) do begin try if s[i] <> '' then INC(count); Inc(i); except break; end; end; Result := count; end; Aufruf übrigens so:
Delphi-Quellcode:
Bei "lol" sagt er z.B. 5.
ShowMessage( IntToStr( Form1.GetLength(Form1.InputLabel.Text) ) );
Bei "lolo" geht er schon auf über 1800 :shock: Weiss jemand woran das liegen kann? Oder ist die Idee an sich schon falsch? air P.S.: Hab anstatt while(TRUE) auch mit nem Boolean probiert, ging auch nicht... |
Re: Funktion um Stringlänge zu ermitteln
So geht's:
Delphi-Quellcode:
PS: Dein Code ist schrecklich formatiert. ;)
function mylength(s: String): Integer;
var len: Integer; begin len := 1; while s[len] <> #0 do inc(len); result := len-1; end; procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage(IntToStr(mylength('Michael Puff'))); end; |
Re: Funktion um Stringlänge zu ermitteln
Argh..natürlich :mrgreen:
Aber trotzdem die Frage, wie bei meinem (doofen) Ansatz so seltsame Werte auftreten :?: Die Idee war die: Sobald der String mit s[i] ne AV auslösen würde, fang ich das per except ab und brech die schleife ab. Selbst wenn #0 mitgewertet wird, müsste es doch gehen, nur, dass ich count-1 machen müsste, oder? air edit: wieso schrecklich formatiert? Ich machs immer mit TabStop und find mich so gut zurecht ;) Leerzeilen mach ich sowieso immer wie nochmal was *g* |
Re: Funktion um Stringlänge zu ermitteln
Zitat:
|
Re: Funktion um Stringlänge zu ermitteln
Du kannst durchaus auf Speicher außerhalb des Strings zugreifen. Es muss nicht zwingend sofort eine Exception kommen. Erst wenn du irgendwohin gerätst was benutzt wird, bekommst du deinen Abbruch.
btw: Die Länge eines PascalStrings steht an Stelle 0 des Strings. s[0] gibt dir also auch die Länge zurück. |
Re: Funktion um Stringlänge zu ermitteln
Zitat:
Hab aber Luckies Funktion nochmal abgeändert, ohne len, nur mit Result. air |
Re: Funktion um Stringlänge zu ermitteln
Zitat:
|
Re: Funktion um Stringlänge zu ermitteln
Zitat:
|
Re: Funktion um Stringlänge zu ermitteln
Zitat:
|
Re: Funktion um Stringlänge zu ermitteln
Zitat:
Zitat:
Ich kann mir nur vorstellen, was du damit meinst, aber wenn ichs mir richtig vorstelle, macht es durchaus Sinn *schnell wieder zurückveränder* |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:08 Uhr. |
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