Forum: Compiler & IDEs Zeichenfolge in Ringbuffer suchen


von MdeWendt (Gast)


Lesenswert?

Hallo,

ich habe einen Ringbuffer unsigned char Buffer[zähler++] und schreibe 
dort Zeichen endlos rein (zähler ist auch ein char und läuft dann so 
schön über). Jetzt möchte ich in diesem Buffer zur Laufzeit 
kontinuierlich nach einer Zeichenfolge suchen (zB TEST). Wie mache ich 
das am Besten?
DANKE für die Hilfe...

Martin

von BAB (Gast)


Lesenswert?

ist eine schnelle eingebung von mir:

pointer auf den anfang des buffer setzten.
1 zeichen aus buffer lesen und auf "T" vergleichen...
wenn nein pointer um eins erhöhen und nächstes zeichen auslesen.
wenn ja flag setzten oder das "T" zwischenspeicher.
pointer wieder um eins erhöhen und auf "e" vergleichen...
wenn ja wieder flag bzw "e" zwischenspeicher..wenn nein...
flags bzw. zwischenspeicher löschen und weiter gehts..:D...

wie gesagt war meine erste idee...

von MdeWendt (Gast)


Lesenswert?

Hallo,

so dachte ich auch zuerst. Aber was ist wenn zB folgendes im Buffer 
steht: TeTest. Dann findet er mit der Methode das zweite Test nicht. Der 
sieht Te und das zweite T ist falsch und er fängt erst wieder beim 
zweiten e an zu suchen. Mache ich einen Fehler?

Martin

von Eckhard (Gast)


Lesenswert?

schonmal sscanf versucht ?


Eckhard

von AndreasH (Gast)


Lesenswert?

Du mußt dir den Pointer vom Anfang der Übereinstimmung, dem ersten 
Zeichen, (in diesem Fall "T") speichern.
Über einen zweiten Pointer mußte Du dann den Rest Deines Strings 
vergleichen.
Sobald wie Deine nachfolgende Auswertung bzw. Vergleich nicht mehr 
stimmt, muss von da an der 1.Pointer eins weitergesetzt werden.
Also in diesem Beispiel wird er dann auf das 1."e" von "TeTest" gesetzt.
Ab hier wird dann wieder normal über den ersten Pointer verglichen bis 
wieder Übereinstimmung ("T").

Eine andere Alternative wäre, sobald wie Du die erste Übereinstimmung 
gefunden hast ("T"), kopierst Du Dir die entsprechende Anzahl der 
Zeichen die Du vergleichen willst aus diesem Buffer raus. 
StringEndeZeichen dranhängen und dann mit strcmp vergleichen.

Ist zwar nicht getestet, aber beides sollte so klappen.

von Jonas Diemer (Gast)


Lesenswert?

ich würde einen zweiten "test-pointer" einführen, der am anfang auf T 
zeigt, wenn T gefunden dann inkrementiert wird (auf e Zeigt) usw.
alternativ geht auch ein zähler.

schlägt eine übereinstimmung fehl (bei vergleich mit höherem zeichen) 
musst du den pointer natürlich zurücksetzen und nochmal vergleichen...

von Christian Schifferle (Gast)


Lesenswert?

P.S.
sscanf kannst du vergessen. Wenn nämlich dein gesuchter Begriff über das 
Ende des Ringbuffers geht und somit am Beginn weiter geführt wird, wird 
sscanf nichts finden.

Gruss
Christian

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.