Variable strpbrk() ändern



  • Hallo,

    zur Zeit hänge ich fest bei mienem Programm.
    Es soll einen Text einlesen und über die Funktion clear_string() die Satzzeichen aus dem String löschen und im Anschluss wieder ausgeben.

    Ich hänge an der Schleife fest. Die erste Initialisierung von ptr in Zeile 12 funktioniert super. Das Programm setzt es auf das erste aufkommende Satzzeichen.
    Die Initialisierung in der Schleife (Zeile 22) hingegen funktioniert nicht so wie ich es gerne hätte, hier wird wieder das gleiche Ausgegeben wie vorher.
    Ich freue mich über eure Hilfe. Vielen Dank schonmal vorab!

    Fabi

    #include <stdio.h>
    #include <string.h>
    
    void clear_string(char *text){
    
    	char zeichen[]= {'.',',','!','?'};
    	char tmp1[80];
    	char tmp2[80];
    	char *ptr;
    	int stelle=0;
    
    	ptr = strpbrk(text, zeichen);
    	while(ptr!=NULL){
    			for(stelle=0; stelle<80; stelle++){
    				if(strcmp(text+stelle, ptr)==0 ) break;
    			}	
    		strncpy(tmp1, text, stelle);
    		tmp1[stelle+1]='\0';
    		strcpy(tmp2, text+stelle+1); 
    		strcat(tmp1, tmp2);
    		strcpy(text, tmp1);
    		ptr=strpbrk(text, zeichen);
    	}	
    }
    
    int main() {
    
    	char text[80];
    
    	printf("\nGeben Sie ihren Text ein: ");
    	fgets(text, 80, stdin);
    
    	printf("\n%s", text);
    	clear_string(text);
    	printf("\n%s", text);
    
    	return 0;
    }
    

  • Mod

    Ist doch klar, dass da das gleiche raus kommt. strpbrk sucht das erste Vorkommen der Zeichen in der Zeichenkette. Weder text noch zeichen verändern sich, daher kommt auch immer das gleiche raus.

    Vielleicht möchtest du lieber ab einer anderen Stelle als den Textanfang anfangen zu suchen, zum Beispiel ab ptr + 1 ?



  • ⚠ strpbrk erwartet zwei C-Strings als Parameter.

    C-Strings sind nullterminiert. Das ist bei deinem Array zeichen nicht der Fall.



  • DirkB schrieb:

    ⚠ strpbrk erwartet zwei C-Strings als Parameter.

    C-Strings sind nullterminiert. Das ist bei deinem Array zeichen nicht der Fall.

    Sorry für die späte Antwort und danke für die schnelle Antwort. Hat direkt funktioniert als ich es abgeändert habe, vielen Dank! 🙂



  • Du musst die auch nicht mühsam einzeln angeben

    char zeichen[]= ".,!?";
    

Anmelden zum Antworten