Autor |
Beitrag |
Maluku Simbali
Hält's aus hier
Beiträge: 3
|
Verfasst: Fr 17.07.15 10:47
Hallo,
wie kann ich einen string oder utf string am schnellsten parsen ? ich bin noch absoluter rookie ... hier mein vorschlag aber mein lehrer meinte es wäre sehr langsam.
Delphi-Quelltext 1: 2: 3: 4:
| for indexcount := 1 to length(tempstring) do begin Showmessage(tempstring[indexcount]); end; |
Vielleicht könnt ihr mir weiterhelfen.
Vielen Dank,
Maluku (Masi)
|
|
platzwart
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: Fr 17.07.15 10:53
Was willst du denn machen? Was verstehst du unter "parsen"???
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
Maluku Simbali
Hält's aus hier
Beiträge: 3
|
Verfasst: Fr 17.07.15 10:57
Hi Platzwart,
ich möchte einen String Buchstaben für Buchstaben durchgehen ... es geht darum zu checken wieviele Buchstaben welchen Typs in einem String sind
|
|
baumina
Beiträge: 305
Erhaltene Danke: 61
Win 7
Delphi 10.2 Tokyo Enterprise
|
Verfasst: Fr 17.07.15 10:59
Die Pos-Funktion innerhalb der System-Unit von Delphi geht auch so vor, also hat dein Lehrer meiner Meinung nach schon sehr hohe Ansprüche.
Gehst du allerdings pro gesuchten Buchstaben jedesmal durch die for-Schleife, muss ich deinem Lehrer recht geben.
|
|
platzwart
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: Fr 17.07.15 11:11
In diesem Fall würde ich es auch so machen, wie du es geschrieben hast...
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
Maluku Simbali
Hält's aus hier
Beiträge: 3
|
Verfasst: Fr 17.07.15 11:20
Wirklich ? ... ich war mir nicht bewusst dass die Ansprüche so hoch sind. Ist das denn die schnellste Variante einen String char by char durchzugehen bzw. auszulesen ?
|
|
baumina
Beiträge: 305
Erhaltene Danke: 61
Win 7
Delphi 10.2 Tokyo Enterprise
|
Verfasst: Fr 17.07.15 11:30
Wenn es für den speziellen Anwendungsfall nicht notwendig wäre komplett Zeichen für Zeichen durch den String zu gehen, aber so wie du deinen Fall beschreibst, fällt mir nichts schnelleres ein.
|
|
Nersgatt
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Fr 17.07.15 11:32
Meistens kann man noch anderen Stellen optimieren.
Wenn Du z.B. eine Aufstellung machen sollst, wie viele A, wie viele B, wie viele C, usw im Text sind, dann wäre es beispielsweise unglücklich für jeden Buchstaben den Text einmal komplett zu durchlaufen.
Beschreib doch mal die Aufgabe komplett und zeig Deinen Lösungsansatz. Dann kann man schauen, wo man dran drehen kann.
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
GuaAck
Beiträge: 376
Erhaltene Danke: 32
Windows 8.1
Delphi 10.4 Comm. Edition
|
Verfasst: Fr 17.07.15 19:41
Hallo,
das folgende müsste schon recht schnell sein:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| VAR Zaehler: Array[byte] of cardinal; c: byte;
BEGIN
FOR index := 1 to length(meinstring) do begin c :=ord(meinstring[index]); Zaehler[c] := Zaehler[c]+1 end; END; |
Wenn es noch schneller werden soll, dann bietet meinstring[index] Potenzial, aber die Übersichtlichkeit ist dann weg.(meinstring[index] sieht wie ein array aus, aber da das array ja dynamisch verlängert werden kann, muss die Windows-Speicher-Verwaltung den Zugriff managen, jeder Zugriff ist also mit einem Funktionsaufruf verbunden. )
Gruß
GuaAck
|
|
Xion
Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Fr 17.07.15 21:38
Beachte: Der Code von GuaAck funktioniert nur für ASCII (255 Zeichen). Ich bin mir gerade unsicher, wie Delphi mit UTF8 umgeht. Es ginge aber auch ähnlich für mehr als 255 Zeichen (eventuell mit einer Hashtabelle).
Wenn du Zeichen zählen sollst, dann musst du logischerweise alle Zeichen mindestens einmal durchgehen. An der Schleife kommst du da faktisch nicht vorbei.
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|