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; }
-
Ist doch klar, dass da das gleiche raus kommt.
strpbrk
sucht das erste Vorkommen der Zeichen in der Zeichenkette. Wedertext
nochzeichen
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[]= ".,!?";