kurze strncmp - Frage (Leerzeichen suchen)



  • feigling schrieb:

    Ich denke, er sucht nach strchr:

    http://www.freebsd.org/cgi/man.cgi?query=strchr&apropos=0&sektion=0&manpath=FreeBSD+5.2.1-RELEASE+and+Ports&format=html

    ->

    if(strchr(string, ' ')) ...

    und warum kann man das nicht mit
    if (strchr(string," ",5)==0)

    machen??

    ich brauch eben genau den fall, dass in einem string die stelle gesucht werden muss, die z.b. 5 Leerzeichen hintereinander aufweist.



  • Weil strchr nur 2 Argumente aufnimmt und nicht so funktioniert, wie du willst :x
    Da musste halt selber ne Funktion erstellen, die die Anfangsstelle zurückgibt nach 5 Leerzeichen.



  • hi,
    danke - also nur kurz noch zum checken, ob ichs kapiert hab:

    for-schleife in der alle zeichen eines strings durchsucht werden,
    int zähler=0 erstellen,
    if zähler==5 dann gib den schleifen-wert minus 5 zurück,
    dann im string nach
    if(strchr(string, ' '))
    suchen und wenn einmal ein ' ' gefunden wurde den zähler ++ setzen, wenn
    was andres als ' ' gefunden wird, zähler auf null setzen.
    dazwischen ein

    oder so ähnlich?
    mann ist das kompliziert.



  • Mach es so:

    /**
     * Alle Chars im String durchgehen, von der startpos aus und
     * vergleichen, ob der aktuelle Char mit dem Gesuchten übereinstimmt;
     * wenn ja, dann sepc hochzählen und überprüfen, ob sepc die gewünschte
     * Anzahl (sepcount) hat und wenn ja, ab dort den String übergeben.
     */
    
    char *strsep(const char *str, int startpos, char sep, int sepcount)
    {
    	char *s;
    	int sepc = 0;
    
    	for(s = (char *)(str + startpos); *s; s++)
    	{
    		if(*s == sep)
    			sepc++;
    		else
    			sepc = 0;
    
    		if(sepc == sepcount)
    			return s + 1;
    	}
    
    	return NULL;
    }
    

    Und benutzen kann man es für deine Bedürfnisse so:

    int
    main()
    {
    	char *test = "Hallo, wie    geht es dir ?";
    	char *res = strsep(test, 0, ' ', 4);
    
    	printf("%s\n", res);
    
    	return 0;
    }
    

    Ich denke mal, das ist, was du willst.



  • Also ich würde es trotzdem mit strstr() machen. Warum denn das Rad neu erfinden?

    strstr() sucht genau die Stelle, wo das erste mal die 5 Leerzeichen auftreten und liefert einen Zeiger darauf zurück (aufs erste Leerzeichen) und damit kann man wunderbar weiterarbeiten.



  • Oh stimmt, so kann man es auch machen. Daran hab ich garnicht gedacht, dass man einfach nach vier Leerzeichen sucht. Naja, kann man machen wie man lustig ist 🙂



  • Also ist es richtig.... wenn nur "geht es dir ?" ausgegeben wird ?



  • Ja, warum sollte es nicht richtig sein ?
    Der Code sucht nach vier Leerzeichen und gibt dann (Pos vom letzten Leerzeichen + 1) zurück und genau da fängt "geht es dir ?" an.



  • habe auch eine kurze frage bezüglich strncmp !
    ich lese "vcpq0" in den string freq ein.

    dann mach ich

    if(0==strncmp(freq,"v",1)&&(0==strncmp(freq,"0",5)))
    

    doch diese bedingung ist nie erfüllt
    das v testet er
    aber die 0 nicht.....aber warum ?! 😕

    thx



  • hat sich bereits erübrigt.......


Anmelden zum Antworten