Ich versuche, eine Funktion in C zu erstellen, um alle Vorkommen einer Teilzeichenfolge in einer Zeichenfolge zu ersetzen. Ich habe meine Funktion gemacht, aber sie funktioniert nur beim ersten Auftreten der Teilkette in der größeren Zeichenfolge. HierErsetzen Sie alle Vorkommen einer Teilzeichenfolge in einer Zeichenfolge in C
ist der Code so weit:
void strreplace(char string[], char search[], char replace[]){
char buffer[100];
char*p = string;
while((p=strstr(p, search))){
strncpy(buffer, string, p-string);
buffer[p-string] = '\0'; //EDIT: THIS WAS MISSING
strcat(buffer, replace);
strcat(buffer, p+strlen(search));
strcpy(string, buffer);
p++;
}
}
ich die C-Programmierung nicht neu bin, aber ich bin hier fehlt etwas.
Beispiel: für die Eingabezeichenfolge „Marie hat Äpfel hat“, die Suche nach „hat“ und Ersetzen durch „blabla“
In der ersten „hat“ ersetzt wird richtig, aber die zweite nicht. Die endgültige Ausgabe ist "Marie blabla Äpfel hasblabla". Beachten Sie, dass das zweite "hat" immer noch da ist.
Was mache ich falsch? :)
EDIT Es funktioniert jetzt. Durch das Hinzufügen des Nullabschlusszeichens wurde das Problem behoben. Ich weiß, dass die resultierende Zeichenfolge größer als 100 sein kann. Es ist eine Hausaufgabe, so dass ich keine Strings länger als 20 oder so haben werde.
@GerardvanHelden Wahrscheinlich, weil sie nicht in der C-Standard-Bibliothek sind? (Denken Sie PHP?) – ace
Wie haben Sie das Ergebnis gesehen? mit einem Debugger? – yeyo
@ace fair point, Kommentar gelöscht. Dachte die PHP-Funktionen intern zugeordnet C stdlib (was sie eine Menge Zeit tun), aber nicht in diesem Fall. –