Es gibt bestehende Tools zur Lösung dieses Problems. Sie heißen lexers, und eines der bekanntesten Beispiele ist lex, in den Kommentaren erwähnt.
Allerdings, wenn Sie es selbst implementieren müssen, Aho-Corasick Algorithmus tut die Sache. Gegeben eine Menge von Strings S = s_1, ..., S_K der Gesamtlänge L, baut es eine trie auf diesen Saiten und macht einen Automaten auf der Grundlage dieser trie. Jetzt füttern Sie Ihre Eingabe-Zeichenfolge in diesen Automaten. Zu jeder Zeit ist es in der Lage, Ihnen die Reihe von Strings von S zu geben, die an der aktuellen Position enden, mit der Zeit proportional zur Anzahl solcher Strings.
Zum Beispiel, wenn S = { "aba", "bababa", "ba", "ABACABA"} und Sie haben die Zeichenfolge rabacaba eingegeben wird, wird der Ausgang des Algorithmus seine {0, 2, 3} (die Indizes der Strings, die an der letzten gefütterten Position enden).
Mit einer solchen Struktur, Wartung aufgetretene Zeichenfolgen und ihre Anzahl ist einfach: nur eine Abfrage auf die Struktur nach jedem Zeichen des Streams.
Dies ist eine typische Anwendung für [lex] (https://en.wikipedia.org/wiki/Lex_ (Software)). – clemens
lex in c verwenden. Es ist eine sehr grundlegende Funktionalität. check out: https://www.lysator.liu.se/c/ANSI-C-grammar-l.html es ist ein sehr großes Beispiel .. aber Sie können lesen und verstehen –