Gast
#4117483
Hallo, Ich lese über die uart einen string ein der sieht so aus, Lcd loeschen=clear der string steht in pname und mein vergleich funktioniert aber nicht. was mache ich falsch mfg
1 | |
2 | |
3 | |
4 | |
|
Anzeige
|
string vergleichen
Gast
#4117483
Hallo, Ich lese über die uart einen string ein der sieht so aus, Lcd loeschen=clear der string steht in pname und mein vergleich funktioniert aber nicht. was mache ich falsch mfg
Gast
#4117485
>was mache ich falsch
Du zeigst nicht den ganzen Code.
Gast
#4117497
Der vergleich funktioniert nicht
Gast
#4117502
>Der vergleich funktioniert nicht >unsigned char pname[] = "Lcd loeschen=clear"; Natürlich funktioniert der nicht. strcmp popelt sich das "clear" nicht aus dem String. strcmp vergleicht den ganzen String. Du möchtest evtl. strstr nehmen.
Gast
#4117576
Dirk B. schrieb: > strcmp vergleicht den ganzen String. > > Du möchtest evtl. strstr nehmen. Ahh na das kann ja nicht gehn. Ich suche eigentlich eine funktion mit der ich den string vergleichen kann und wenn das clear drin vorkommt dann mach etwas Also strstr avr stromer schrieb: Ich suche eigentlich eine funktion mit der ich den string vergleichen > kann ... Das macht strcmp. Gleichheit vom Anfang bis Ende. avr stromer schrieb: > ... und wenn das clear drin vorkommt dann mach etwas Du suchst das Vorkommen von einem Teilstring: strstr Andere Möglichkeit: nach dem = suchen und dahinter das strcmp ansetzen.
Gast
#4120402
Leider läuft das bei mir nicht mit dem vetgleich. ich hab nun versucht was nach dem = ist auszugeben aber das funktioniert bei beiden Vergleichen nicht. kann mir jemand weitethelfen
Wie gesagt strcmp vergleicht zwei Stings auf absolute Gleichheit, von anfang bis ende. Dein String mit dem du vergleichst ist "Lcd loeschen=clear", du willst aber wissen ob "Lcd loeschen=" darin vorkommt... klar gibt strcmp dort != 0 zurück. Nimm strstr und schau ob != NULL und gut ist. strstr liefert dir den Pointer auf den Anfang des Vergleichstrings den du suchst. Das was nach dem "=" ist bekommst du also mit "strstr(pname, "Lcd loeschen=") + 13" Du kannst auch strncmp (achte auf das n in der Mitte) nehmen. http://www.cplusplus.com/reference/cstring/strncmp/
Gast
#4120446
Wäre das denn so richtig
if(strstr(pname,("Lcd loeschen=")+13)
{
Lcd_print(pname);
}
Nein. Was willst du erreichen? Was, nicht wie.
Gast
#4120489
Dirk B. schrieb: > Nein. > > Was willst du erreichen? Was, nicht wie. Ich wollte erstmal den string nach dem = ausgeben. zueest müsste ich ja erstmal wissen wie viele zeichen hinter dem = sind? avr stromer schrieb: > Ich wollte erstmal den string nach dem = ausgeben. > > zueest müsste ich ja erstmal wissen wie viele zeichen hinter dem = sind? dann versuche es mal mit strstr und suche das = noch besser du definierst einen (char *) und weisst diesem das strstr(string, "=") zu die Länge nach dem '=' bekommst du mit +1 und strlen
Gast
#4120707
avr stromer schrieb: > Ich wollte erstmal den string nach dem = ausgeben. Geht schon in die Richtung "Wie" > zueest müsste ich ja erstmal wissen wie viele zeichen hinter dem = sind? Musst du wirklich? Zum suchen von einem Zeichen ist strchr besser: http://www.cplusplus.com/reference/cstring/strchr/
Gast
#4120744
DirkB schrieb: > avr stromer schrieb: >> Ich wollte erstmal den string nach dem = ausgeben. > Geht schon in die Richtung "Wie" > >> zueest müsste ich ja erstmal wissen wie viele zeichen hinter dem = sind? > Musst du wirklich? > > Zum suchen von einem Zeichen ist strchr besser: > http://www.cplusplus.com/reference/cstring/strchr/ > char *p; > > if ((p=strchr(pname,'=')!=NULL) // ist ein = vorhanden > { Lcd_print(p+1); > } wie kann ich den string hinter dem = ausgeben das bekomm ich nicht hin Das steht in genau der letzten Codezeile vor Deiner Frage. Liest Du eigentlich auch die Antworten, die Dir gegeben werden? Hier geht's ja um Controller. Ich nehm daher an, das soll ein command an einen controller sein. Ich wuerd den Codieren. Falls nicht allzuviele moeglichkeien ausgedrueckt werden sollen, kann man ihn zB als ein paar Bytes ausdruecken. Allenfalls mit einem Protokoll, das nicht auf text beruht. Im Prinzip geht es darum, nicht benoetigte, und sinnlose Redundanz wegzulassen. Denn wenn der String auf Identitaet geprueft wird, kann man ebenso auf "01" pruefen.
Gast
#4120780
Ich sehe gerade, dass ich eine Klammer vergessen habe:
avr stromer schrieb: > wie kann ich den string hinter dem = ausgeben das bekomm ich nicht hin Du willst Strings zerlegen und kennst dich nicht mit Zeiger aus? Spiel damit erstmal auf dem PC rum. Da kannst du einfacher ein paar printf einfügen oder mit dem Debugger durchsteppen. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|