strtok zwischen zwei Klammern



  • ich möchte in einem LPTSTR ein strtok zwischen zwei klammern ausführen

    Gibt es eine Funktion, die das erledigt?

    Ich persönlich würds mit einem begrenzten Zwischenspeicher machen in denen alle Buchstaben ab der '(' bis zur ')' gespeichert werden. Gibt es noch eine bessere Möglichkeit (sicherlich)

    Am Ende sollte es so aussehen, dass aus

    lolololololo (lalalala,lalalalala,lalalala)
    

    die lalalalala's ausgelesen werden.

    thx im voraus 😉



  • Du könntest mit strnspn() und strchr()* durch deinen Text durchlaufen und die gefundenen Teilstrings per strncpy() rauskopieren, wenn es nötig ist.

    * Oder besser: Du steigst auf std::string um und nutzt find_first_of(), find() und substr().



  • Hab jetzt selbst eine Funktion geschrieben :

    //Reads content between two brackets
    LPTSTR	strbrk(char strng[4096])
    
    {
    	unsigned int	start=0;
    	unsigned int	end=0;
    	unsigned int	ptr=0;
    
    	for(int i=0;i<4096;++i){
    		if(strng[i]=='(')start=i+1;
    		if(strng[i]==')')end=i-1;
    		if(strng[i]==0)break;
    	}
    	if(end <start)return	"$$nil";
    
    	char	*cache=new	char[end-start];
    
    	for(int j=start;j<=end;++j){
    		cache[ptr++]=strng[j];
    	}
    
    	return cache;
    }
    

    → liest zwischen den Klammern

    aber ich bekomme immer "²²²" an den string angehängt

    Wie kann ich das beheben?
    Wie mach ich die größe der input unbegrenzt?



  • RobthaR schrieb:

    Wie kann ich das beheben?

    Vermutlich indem du ein Byte mehr reservierst und mit '\0' füllst.

    Wie mach ich die größe der input unbegrenzt?

    Übernimm deinen String als char* (die Arraygröße des Parameters verschluckt der Compiler sowieso) und bestimm' die Länge mit strlen().

    Übrigens solltest du, anstatt alles neu zu bauen, die Funktionen der String-Bibliothek (<cstring>/<string.h>) oder noch besser die Klasse std::string verwenden.



  • Danke, strlen war die Funktion, die ich gebraucht hatte, hatte es nämlich vorher mit sizeof gemacht weil ichs nicht besser wusste, aber mit strlen ist alles klar 👍


Anmelden zum Antworten