![]() |
Mit Pos im String suchen, was weiter?
Pos gibt ja das erste auftreten eines teilstrings im string an, aber was ist mit den weiteren, wenn ich das erste aufkommen nicht ändern möchte, wie finde ich das 2te, 3te, 4te ... n-te?
|
Abschneiden.
|
oha, wie effektiv, ich glaub dann lauf ich den string mit ner For schleife durch...
|
Das ist zwar nicht die eleganteste Variante, aber sie erfüllt ihren Zweck:
Delphi-Quellcode:
Das klappt aber nur für recht kurze Zeichenketten, bei größeren Texten ist das zu rechenaufwendig
procedure zeichenzaehlen;
var zaehler,zahl, Ende:integer; text:string; zeichen: char; begin text := {hier musst Du die Quelle angeben}; zeichen := {hier gibst Du das Zeichen an nach dem gesucht werden soll}; zahl := 0; Ende := {hier steht bis zum wie vielten Zeichen gezählt werden soll} for zaehler := 1 to length (text) do begin if text[zaehler] = zeichen then inc(zahl); if zahl=ende then exit end; end; |
wie gesagt :D
|
OK, du willst was effektives? Dann pack den String in einen PChar und wander mit dem Pointer durch die Zeichenkette. Ungefähr so (jetzt mal ungetestet):
Delphi-Quellcode:
var
p : PChar; i : Integer; begin i := 0; // Eventuell noch Speicher reservieren p := 'Hello World, good-bye universe.' while (p^ <> #0) do begin if p^ = #32 then Inc(i); Inc(p); end; |
Wie wäre es mit einem Blick in die CodeLibrary Leute :?:
![]() ...:cat:... |
es gibt ein unterschied zwischen quantität und qualität.
Der Code sprengt den größen-rahmen um einiges |
Was genau meinst Du? Der basiert auf der Orignal-Pos Funktion von Delphi und ist flexibel einsetzbar. Zudem auch recht zügig ;-) Assembler ist halt etwas länger.
...:cat:... |
ja, das mein ich, es lohnt sich für mich nicht, soviel code zunehmen, während das resultat nur sehr klein ist.
Mich reizt Delphis string verarbeitung sowieso. Z.b ist es auf einfachem wege auch nicht möglich die anzahl der As oder Bs in einem String möglichst leicht zu zählen. an dem problem sitz ich schon seit gestern. die einzige delphi methode is einfach nur mit pos immer suchen, rest abschneiden, nochmal suchen, da leided die effizienz. und for ist auch nicht so programmier geschickt |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:55 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