Forum: Mikrocontroller und Digitale Elektronik log Verknüpfung mit strcspn funktioniert nicht


von marco (Gast)


Lesenswert?

Hallo,
ich wollte gerne mit Hilfe von strcspn() Daten mit Hilfe einer log 
Verknüpfung untersuchen. Sprich, wenn an Stelle 9 des Strings 1,35 und 
an Stelle 7 2,B,A oder 1, C auftaucht, soll das Programm reagieren. 
Eigentlich muss das so doch klappen?! Klappt aber nicht. Gruß

if(
strcspn( data, "135" ) == 9 &&
( strcspn( data, "2BA" ) == 7 || strcspn( data, "1C" )== 7 ) )
){
....
}

von Tim R. (vref)


Lesenswert?

Get span until character in string

Scans str1 for the first occurrence of any of the characters that are 
part of str2, returning the number of characters of str1 read before 
this first occurrence.

The search includes the terminating null-characters, so the function 
will return the length of str1 if none of the characters of str2 are 
found in str1.


insofern macht dieser code das selbe wie deiner:

if(strcspn( data, "135" ) == 9 &&strcspn( data, "12ABC" ) == 7)
){
}

...und immer im kopf behalten, dass das erste zeichen im string den 
index 0 hat...
also musst du das vermutlich eher so machen:

if(strcspn( data, "135" ) == 8 && strcspn( data, "12ABC" ) == 6)
){
}

von marco (Gast)


Lesenswert?

hallo,
danke für die antwort. also wenn ich nur if(strcspn( data, "135" ) == 9) 
verwende klappt es. sobald ich noch zusätzliche log Verknüpfungen 
einbinden will, geht gar nichts mehr. mir ist die funktion von strcspn 
durchaus klar, allerdings kapier ich nicht, warum das nicht geht...

von Tim R. (vref)


Lesenswert?

ah ok.
also die "1" darf ja sowohl an stelle 6 und 9 vorkommen.

wenn jetzt eine 1 vorkommt, kommt bei beiden strcspn 6 raus.

wohl doch einfacher so:

if ( data[6] == '1' || data[6]=='2' || data[6]=='A || data[6]=='B' || 
data[6]=='C'') &&
      (data[8] == '1' || data[8]=='3' || data[8]=='5')  )
{
   (...)
}

von Tim R. (vref)


Lesenswert?

oder auch mit strchr:

if ( strchr( "12ABC", data[6]) && strchr( "135", data[8])  )

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.