Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Funktion um Stringlänge zu ermitteln (https://www.delphipraxis.net/43696-funktion-um-stringlaenge-zu-ermitteln.html)

Airblader 7. Apr 2005 11:38


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:
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;
Aber das liefert sehr fragwürdige Zahlen.
Aufruf übrigens so:
Delphi-Quellcode:
ShowMessage( IntToStr( Form1.GetLength(Form1.InputLabel.Text) ) );
Bei "lol" sagt er z.B. 5.
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...

Luckie 7. Apr 2005 11:43

Re: Funktion um Stringlänge zu ermitteln
 
So geht's:
Delphi-Quellcode:
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;
PS: Dein Code ist schrecklich formatiert. ;)

Airblader 7. Apr 2005 11:47

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*

Basilikum 7. Apr 2005 11:51

Re: Funktion um Stringlänge zu ermitteln
 
Zitat:

Zitat von Luckie
PS: Dein Code ist schrecklich formatiert. ;)

und noch viel schrecklicher vom Inhalt her.... so lange probieren, bis eine Access-Violation auftritt.... ;-)

Jasocul 7. Apr 2005 11:52

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.

Airblader 7. Apr 2005 11:55

Re: Funktion um Stringlänge zu ermitteln
 
Zitat:

Zitat von Basilikum
Zitat:

Zitat von Luckie
PS: Dein Code ist schrecklich formatiert. ;)

und noch viel schrecklicher vom Inhalt her.... so lange probieren, bis eine Access-Violation auftritt.... ;-)

Schrecklich aber theoretisch funktionabel :warn: :mrgreen: (ich sagte theoretisch! :mrgreen: )

Hab aber Luckies Funktion nochmal abgeändert, ohne len, nur mit Result.

air

Luckie 7. Apr 2005 11:55

Re: Funktion um Stringlänge zu ermitteln
 
Zitat:

Zitat von Jasocul
btw: Die Länge eines PascalStrings steht an Stelle 0 des Strings. s[0] gibt dir also auch die Länge zurück.

Jupp, aber das war ja nur ein beispiel, um seinen Freund etwas zu verdeutlichen.

Luckie 7. Apr 2005 11:56

Re: Funktion um Stringlänge zu ermitteln
 
Zitat:

Zitat von Airblader
Hab aber Luckies Funktion nochmal abgeändert, ohne len, nur mit Result.

Warum verhunst du meinen Code? Das war Absicht. So kann der Compiler besser optimieren, da er das EAX Register frei hat.

Jasocul 7. Apr 2005 11:59

Re: Funktion um Stringlänge zu ermitteln
 
Zitat:

Zitat von Luckie
Zitat:

Zitat von Jasocul
btw: Die Länge eines PascalStrings steht an Stelle 0 des Strings. s[0] gibt dir also auch die Länge zurück.

Jupp, aber das war ja nur ein beispiel, um seinen Freund etwas zu verdeutlichen.

Stimmt. Wer lesen kann (und sich das auch noch merkt) ist im Vorteil.

Airblader 7. Apr 2005 12:00

Re: Funktion um Stringlänge zu ermitteln
 
Zitat:

Zitat von Luckie
Warum verhunst du meinen Code?

Dumme Angewohnheit von mir :angel2: ;)

Zitat:

Zitat von Luckie
So kann der Compiler besser optimieren, da er das EAX Register frei hat.

Aja...was? :mrgreen:
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 12:24 Uhr.
Seite 1 von 3  1 23      

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