CString auslesen



  • HI LEute

    Ich habe einen Cstring in dem mehrer Wörter drinnen stehen die duch Leerzeichen getrennt sind.

    Frage: Wie kann ich die Wörter am besten einzeln Auslesen???

    mfg Florian



  • das geht mit strtok

    CString sString = "Lies mich aus";
    	char *token;
    	char szStep[2]	= " ";//gesuchte abschnitte Geht auch " ;-." usw...
    	char szSearch[5]	= "mich";
    
    	token = strtok( sString.GetBuffer(sString.GetLength()), szStep );	//Einzelner Abschnitt zwischen gesuchtem
    
    	while( token != NULL )							//Durchlaufe Schleife solange was gefunden wird
    	{
    		if(strstr( token, szSearch ) != NULL)				//Ist im Abschnitt das gesuchte vorhanden
    		MessageBox(token);
    
    		token = strtok( NULL, szStep );					//hol dir den nächsten abschitt
    	}
    	delete token;
    

    LowFly



  • Da ginge z.B. so:

    --

    int pos1 = [Stringname].Find(" ",startpos);
    int pos2 = [Stringname].Find(" ",pos1);
    int iLaenge=pos2-pos1;

    CString ausgabe = [Stringname].Mid(pos1 ,iLaenge);
    startpos=pos2;

    --

    Jetzt durchläufst du den String mit einer Schleife und fertig.
    Schönen Abend,

    Michael



  • ähm der code wird so nie was finden

    int pos1 = [Stringname].Find(" ",startpos);
    int pos2 = [Stringname].Find(" ",pos1);
    int iLaenge=pos2-pos1;

    CString ausgabe = [Stringname].Mid(pos1 ,iLaenge);
    startpos=pos2;

    da
    int pos2 = [Stringname].Find(" ",pos1);
    das selbe zurückgibt wie
    int pos1 = [Stringname].Find(" ",startpos);
    bzw ist startpos das gleiche wie pos1 & pos2

    das ist ne enlosschleife die du da produziert hast. 😉



  • In einem Programm von mir läuft es so. Die Positionen sind nicht idetisch, da der 2. Find ja erst ab der Position startet, wo der letzte geendet hat.



  • In einem Programm von mir läuft es so

    dann test mal das was ich nach deiner beschreibung erstellt hab. einfach den code in dein Programm Kopieren, würde ich die schleife nicht mit sString.GetLength() beenden würde die schleife morgen noch laufen 😉

    CString sString = "Lies mich aus";
    int startpos = 0;
    for(int nloop = 0; nloop<=sString.GetLength();nloop++)
    {
    int pos1 = sString.Find(" ",startpos);
    int pos2 = sString.Find(" ",pos1);
    int iLaenge=pos2-pos1;

    CString ausgabe = sString.Mid(pos1 ,iLaenge);
    startpos=pos2;
    MessageBox(ausgabe);

    CString f;
    f.Format("%i",startpos);
    MessageBox(f);
    }

    der fehler ist das der code int pos2 = sString.Find(" ",pos1); auf der Position wo er den space " " gefunden hat wieder sucht und genau dort wieder was findet, endlos somit.

    +1 😉



  • Sag doch gleich, dass ich das +=1 beim übertragen vergessen habe 🙂

    Danke für den Hinweis!


Anmelden zum Antworten