Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Schleifenproblem / Logikproblem? (https://www.delphipraxis.net/163126-schleifenproblem-logikproblem.html)

frieder2008 16. Sep 2011 10:50

Schleifenproblem / Logikproblem?
 
Liebe Leute,

ich habe ein kleines logisches/Schleifenproblem, bei dem ich einfach nicht weiter komme:

Ich habe eine stringliste, die ich nach bestimmten String-Folgen absuchen will. Die Stringabfolge muss dabei immer in der richtigen Reihenfolge sein:
zum Bleistift:
Code:
Liste:
1
2
3
4
5
...
1
2
4
5
2
...
1
4
3
2
5
...

Suche nach Abfolge: "2-3-4"
Liefere die Listenposition, an der die "2" steht - und danach in der richtigen Reihenfolge: 2-4 kommen
Das sollte insbesondere auch klappen, wenn die Anzahl der zu suchenden Abfolge unbekannt (also n) ist.
Was ich schon hinbekommen habe, ist eine Schleife, die aber lediglich prüft, ob - z.B. bei der Abfolge "2-3-4" die "3" und die "4" in der Umgebung (hier:) von +2 Stellen steht:

- Suche alle Positionen von "2" und speichere sie in einer gesonderten Liste.
- Prüfe dann alle Funde von "2" danach, ob rechts davon "3" und "4" kommen.

Aber wie schaffe ich es, dass die Reihenfolge von "3" und "4" (3-4) korrekt berücksichtigt wird?!?
Ich stehe irgendwie auf dem Schlauch.. :wall:

Wäre dankbar für jeden Hinweis.

Viele Grüße aus dem Südwesten,
frieder

Teekeks 16. Sep 2011 10:54

AW: Schleifenproblem / Logikproblem?
 
Was mir spontan einfällt:

Code:
-Suche nach der 2
--Teste die nächste Stelle, wenn falsch abbrechen
--wenn richtig: eine Stelle weiter gehen und den vorherigen Schritt wiederholen

DeddyH 16. Sep 2011 10:57

AW: Schleifenproblem / Logikproblem?
 
Könnte man nicht einfach Pos() auf Stringlist.Text anwenden? Zumindest, solange alle Strings nur 1 Zeichen enthalten, sollte das doch das richtige Ergebnis bringen, oder?

frieder2008 16. Sep 2011 11:20

AW: Schleifenproblem / Logikproblem?
 
Oh mann, ich stand echt aufm Schlauch. Im Grunde müsste es so reichen:

Kotextstrings: n
Prüfstrings: n

Delphi-Quellcode:
for i:= positionslistederAusgangsstrings - 1 downto 0 do
  for ii:=0 to n do
    if Kotextstrings[ii] <> prüfstrings[i] then
      positionslistederAusgangsstrings.löscheItem(i);
Ich hab um 10 Ecken rum gedacht.. Danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:40 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