AGB  ·  Datenschutz  ·  Impressum  







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

Wie oft ist ein Zeichen in einem String

Ein Thema von uplink · begonnen am 25. Jan 2007 · letzter Beitrag vom 26. Jan 2007
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#11

Re: Wie oft ist ein Zeichen in einem String

  Alt 25. Jan 2007, 16:06
Bei meiner könnt man nich das Result erhöhen mit Inc() machen... und evtl. PosEx statt Pos + Copy verwenden... ansonsten läuft die auch für Fragen wie "Wie oft ist
im Quelltext?"
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#12

Re: Wie oft ist ein Zeichen in einem String

  Alt 25. Jan 2007, 16:09
Zitat von Nils_13:
Wo gab es den schonmal ? Vlt. in einem anderen Thread, aber ich habe doch schneller gepostet
Ich bezog es auf den 1. Code Das er schonmal, von dir, gepostet wurde ^^
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#13

Re: Wie oft ist ein Zeichen in einem String

  Alt 25. Jan 2007, 16:12
[quote="xZise"]
Zitat von dominikkv:
Gabs schonmal:
das sah vor 2 minuten noch anders aus

Zitat von Muetze1:
Da würde ich glatt mal frech fragen: wer hat die schnellste?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
  Start: TTime;
begin
Start := Now;
for I := 1 to 100000000 do
  Zeichen('abcabcabcabcabcabcabcabcabcabc', 'a');
label1.Caption := TimeToStr(Now-Start);
end;
-> 7 sekunden
Dominik
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#14

Re: Wie oft ist ein Zeichen in einem String

  Alt 25. Jan 2007, 16:17
Wenn du eine Geschwindigkeitsmessung durchführen willst, kannst du TTime eigentlich vergessen. Nimm lieber Delphi-Referenz durchsuchenGetTickCount.
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#15

Re: Wie oft ist ein Zeichen in einem String

  Alt 25. Jan 2007, 16:21
Zitat von Matze:
Wenn du eine Geschwindigkeitsmessung durchführen willst, kannst du TTime eigentlich vergessen. Nimm lieber Delphi-Referenz durchsuchenGetTickCount.
Oder noch besser: GetThreadTimes ^^

Tut über Threads... Und dabei ist eine Zeitberechnung
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#16

Re: Wie oft ist ein Zeichen in einem String

  Alt 25. Jan 2007, 16:21
Dann muss ich doch noch einen draufsetzen.
Im Prinzip zwar das Gleiche, aber StrCharsCount zählt gleich mehrere Zeichen auf einmal.
Delphi-Quellcode:
function StrCharCount(const S: string; C: Char): Integer;
var
  I: Integer;
begin
  Result := 0;
  for I := 1 to Length(S) do
    if S[I] = C then
      Inc(Result);
end;

function StrCharsCount(const S: string; Chars: TSysCharSet): Integer;
var
  I: Integer;
begin
  Result := 0;
  for I := 1 to Length(S) do
    if S[I] in Chars then
      Inc(Result);
end;

anzahl := StrCharsCount('Delphi2007', ['0'..'9']); // ergibt 4
Kopiert aus der JCL.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#17

Re: Wie oft ist ein Zeichen in einem String

  Alt 25. Jan 2007, 16:22
Dem Fragesteller ist mit den Lösungen eigentlich recht wenig geholfen. Er kann sich die Funktionen kopieren aber der Lerneffekt ist fast 0
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#18

Re: Wie oft ist ein Zeichen in einem String

  Alt 25. Jan 2007, 16:32
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var s:string;
    i:integer;
    a:array[0..4] of cardinal;
begin
  setlength(s,100000);
  for i:=1 to 100000 do s[i]:=chr(i mod 10 +60);
  memo1.Clear;

  a[0]:=gettickcount;
  for i:=1 to 1000 do Zeichen(s,'A');
  a[1]:=gettickcount;
  for i:=1 to 1 do countsubstr('A',s);
  a[2]:=gettickcount;
  for i:=1 to 1 do bla(s,'A');
  a[3]:=gettickcount;
  for i:=1 to 1000 do countchar(s,'A');
  a[4]:=gettickcount;
  for i:=1 to 4 do memo1.lines.add(inttostr(a[i]-a[i-1]));




end;
Sieger ist "Zeichen" mit etwa 140ms
Zweiter ist "countchar" mit etwa 200ms
Dritter ist "bla" mit etwa 31ms *1000 ==>31s
Vierter ist "Countsubstr" mit 953ms *1000 ==>953s
Und wir haben keinen Letzten!

zur Verteidigung von countsubstr muss man noch erwähnen, dass er statt Zeichen zu zählen, gleich ganze Teilstrings gezählt hat (wie ja auch der Titel sagt)

(Mehr Aufwand für die Zeitrechnung wollte ich nicht treiben)
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#19

Re: Wie oft ist ein Zeichen in einem String

  Alt 25. Jan 2007, 17:25
Und dass ich den uralten Code wirklich langsam mal optimieren muss

Edit: Okay.. ich fordere ein neues Rennen

Neuer Code:

Delphi-Quellcode:
function CountSubStr(SubStr, Str: string): integer;
var
  Offset: Cardinal;
  l: Integer;
begin
  l := Length(SubStr);
  Offset := 1;
  Result := 0;
  repeat
    Offset := PosEx(SubStr, Str, Offset);
    if Offset > 0 then
    begin
      Inc(Result);
      Inc(Offset, l);
    end;
  until Offset = 0;
end;
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#20

Re: Wie oft ist ein Zeichen in einem String

  Alt 25. Jan 2007, 17:52
Zitat von cruiser:
Und dass ich den uralten Code wirklich langsam mal optimieren muss

Edit: Okay.. ich fordere ein neues Rennen
hehe...
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
  s: String;
  tick: Cardinal;
begin
  setlength(s,100000);
  for i:=1 to 100000 do
    s[i]:=chr(i mod 10 +60);
  tick := GetTickCount;
  for I := 1 to 1000 do
    CountSubStr('A', s);
  label1.Caption := IntToStr(GetTickCount - Tick);
end;
ich komme auf 203 ms...
Dominik
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 04:09 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