www.mikrocontroller.net

Forum: Compiler & IDEs Zeichenfolge in Ringbuffer suchen


Autor: MdeWendt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: BAB (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: MdeWendt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Eckhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schonmal sscanf versucht ?


Eckhard

Autor: AndreasH (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jonas Diemer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Christian Schifferle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.