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
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...
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
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.
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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.