2009-07-31 15 views
0

Ich versuche eine Funktion zu schreiben, die wiederholt reguläre Muster mit einer Eingabezeichenfolge vergleicht. Die Funktion sollte Muster 1 mit der Eingabezeichenfolge vergleichen und sie in Teile von übereinstimmenden und nicht übereinstimmenden Segmenten aufteilen. Muster 2 würde anschließend für diese nicht übereinstimmenden Segmente verwendet werden, bis alle Eingabemuster verwendet wurden. Das Rückgabeargument wäre dann ein Array aller Teilstrings.Datenstruktur zum wiederholten Aufteilen einer Zeichenfolge in kleinere Teile

Einfaches Beispiel:

input string "abcdefgh" against patterns "bc" and "f", would first split it into "a", "bc" and "defgh". Subsequently pattern "f" would be run against the "a" and "defgh" part and splitting the later into "de", "f", and "gh". Return argument {"a", "bc", "de", "f", "gh"}

(Ich würde auch mit Spiel/Nicht-Übereinstimmungs Informationen zusammen mit ihm ein assoziatives Array halten)

Aber meine Fragen sind: Welche Datenstruktur am besten geeignet wäre zu diese Art von Aufgabe durchführen? Und wie wäre das am besten zu lösen? Es fühlt sich an wie etwas, das rekursiv funktioniert.

+0

sollte die Ausgabe sortiert werden? – palindrom

Antwort

2

Eine verkettete Liste kommt in den Sinn, wenn Sie bei jeder Übereinstimmung einer Regex mit einem bestimmten Knoten den betreffenden Knoten entfernen und stattdessen 3 verknüpfte Knoten einfügen.

Die besondere „node“ Struktur könnte mit 3 Feldern als struct so einfach sein, ein char* für die Schnur, ein bool (char in c), ob es eine Übereinstimmung gibt oder nicht, und den Zeiger auf den nächsten Knoten.

+0

Danke. Ich werde es versuchen. –

+0

Ich sah gerade Ihre Anforderung, dass die Daten sortiert werden sollten (ich nehme an, Sie meinen, dass es in der Reihenfolge angezeigt werden sollte, in der es in der ursprünglichen Zeichenfolge wie in Ihrem Beispiel war) und diese Datenstruktur tut es bereits. – Blindy

+0

Es wird auch nicht immer 3 Knoten sein, die ich einfügen müsste. Ein Muster könnte mehr als 1 Übereinstimmung innerhalb des Subjekts ergeben, die mehr Knoten benötigen würde, aber das ist kein großes Problem. Ich implementiere deinen Rat und hoffe, es wird funktionieren :) –

Verwandte Themen