AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Funktion um Stringlänge zu ermitteln

Ein Thema von Airblader · begonnen am 7. Apr 2005 · letzter Beitrag vom 8. Apr 2005
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von Airblader
Airblader

Registriert seit: 29. Okt 2004
Ort: Geislingen an der Steige
742 Beiträge
 
#1

Funktion um Stringlänge zu ermitteln

  Alt 7. Apr 2005, 12:38
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:
ShowMessage( IntToStr( Form1.GetLength(Form1.InputLabel.Text) ) ); Bei "lol" sagt er z.B. 5.
Bei "lolo" geht er schon auf über 1800

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...
Ingo Bürk
Es nimmt der Augenblick, was Jahre geben.

Johann Wolfgang von Goethe
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Funktion um Stringlänge zu ermitteln

  Alt 7. Apr 2005, 12:43
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Airblader
Airblader

Registriert seit: 29. Okt 2004
Ort: Geislingen an der Steige
742 Beiträge
 
#3

Re: Funktion um Stringlänge zu ermitteln

  Alt 7. Apr 2005, 12:47
Argh..natürlich

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*
Ingo Bürk
Es nimmt der Augenblick, was Jahre geben.

Johann Wolfgang von Goethe
  Mit Zitat antworten Zitat
Basilikum

Registriert seit: 9. Aug 2003
389 Beiträge
 
Delphi 7 Professional
 
#4

Re: Funktion um Stringlänge zu ermitteln

  Alt 7. Apr 2005, 12:51
Zitat von Luckie:
PS: Dein Code ist schrecklich formatiert.
und noch viel schrecklicher vom Inhalt her.... so lange probieren, bis eine Access-Violation auftritt....
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.355 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Funktion um Stringlänge zu ermitteln

  Alt 7. Apr 2005, 12:52
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.
Peter
  Mit Zitat antworten Zitat
Benutzerbild von Airblader
Airblader

Registriert seit: 29. Okt 2004
Ort: Geislingen an der Steige
742 Beiträge
 
#6

Re: Funktion um Stringlänge zu ermitteln

  Alt 7. Apr 2005, 12:55
Zitat von Basilikum:
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 (ich sagte theoretisch! )

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

air
Ingo Bürk
Es nimmt der Augenblick, was Jahre geben.

Johann Wolfgang von Goethe
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Funktion um Stringlänge zu ermitteln

  Alt 7. Apr 2005, 12:55
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Funktion um Stringlänge zu ermitteln

  Alt 7. Apr 2005, 12:56
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.355 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Funktion um Stringlänge zu ermitteln

  Alt 7. Apr 2005, 12:59
Zitat von Luckie:
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.
Peter
  Mit Zitat antworten Zitat
Benutzerbild von Airblader
Airblader

Registriert seit: 29. Okt 2004
Ort: Geislingen an der Steige
742 Beiträge
 
#10

Re: Funktion um Stringlänge zu ermitteln

  Alt 7. Apr 2005, 13:00
Zitat von Luckie:
Warum verhunst du meinen Code?
Dumme Angewohnheit von mir

Zitat von Luckie:
So kann der Compiler besser optimieren, da er das EAX Register frei hat.
Aja...was?
Ich kann mir nur vorstellen, was du damit meinst, aber wenn ichs mir richtig vorstelle, macht es durchaus Sinn
*schnell wieder zurückveränder*
Ingo Bürk
Es nimmt der Augenblick, was Jahre geben.

Johann Wolfgang von Goethe
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:24 Uhr.
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