[C] Teilstring suchen und erstzen

fish-guts

Erfahrenes Mitglied
Hallo zusammen

Da ich bisher nur C++ orientierte Ansätze gesehen habe, mache ich mal diesen Thread auf.

Ich versuche, eine Funktion zu erstellen, die als Argument einen String, einen Teilstring und einen neuen String entgegen nimmt. Die Funktion soll den String auf den Teilstring durchsuchen, und mit dem neuen String ersetzen. Schlussendlich soll der neue String zurückgegeben werden. Zum Beispiel:

String : "ich bin im Wald"

Dann will ich "Wald" mit "Himmel" ersetzen, sodass ein Zeiger auf den neuen String "Ich bin im Himmel" zurückgeliefert wird.

Ich hoffe, ich habe mich verständlich genug ausgedrückt, ich hab leider keinen Plan wie ich das machen soll.

Vielen Dank schon im Voraus für die Hilfe

Gruss

FG
 
Zuletzt bearbeitet:
Code:
#include<string.h>
void ersetzen(char *a,char *b,char *c,char *z)
{char *d;int i;d=(char *)malloc(strlen(a)+1);
for(i=0;i<strlen(a);i++){strcpy(d,&(a[i]));
if(!strcmp(d,b)){strcpy(z,a);z[i]=0;strcat(z,c);
strcat(z,a[i+1+strlen(b)]);free(d);return;}}free(d);*c=0;}

Parameter: Quelle, suchstring, durch was ersetzen, ziel
Ist nicht die beste Lösung, aber die einfachste :)
na, jedenfalls funktioniert es
(glaub ich - sonst sags halt)

Gruß
 
Hi.
Code:
#include<string.h>
void ersetzen(char *a,char *b,char *c,char *z)
{char *d;int i;d=(char *)malloc(strlen(a)+1);
for(i=0;i<strlen(a);i++){strcpy(d,&(a[i]));
if(!strcmp(d,b)){strcpy(z,a);z[i]=0;strcat(z,c);
strcat(z,a[i+1+strlen(b)]);free(d);return;}}free(d);*c=0;}
OMG, warum schreibst du solch unleserlichern Code?
Parameter: Quelle, suchstring, durch was ersetzen, ziel
Ist nicht die beste Lösung, aber die einfachste :)
na, jedenfalls funktioniert es
(glaub ich - sonst sags halt)
Es funktioniert nicht. Du machst den temp. String d ja nur so groß wie den Quellstring?! Wie soll man da etwas ersetzen durch etwas das größer ist als der Ersetzungsstring?

\edit: Hab mir den Code nochmal angeschaut. Er funktioniert wahrscheinlich doch, aber äußerst ineffizient, dadurch das du den Quellstring x-mal kopierst um den gesuchten String zu finden. Ich sagte ja, das der Code unleserlich ist...
C:
char* replace(const char* str, const char* find, const char* x) {
  const char* c = strstr(str, needle);
  char* r;

  if (c != NULL) { // wenn gefunden
    r = malloc(strlen(str) + strlen(x) - strlen(find) + 1); // ausreichend großen String allozieren
    strncpy(r, str, c - str); // 1. Teil bis zu find nach r kopieren
    r[c - str] = '\0';
    strcat(r, x); // an r den replacement String anhängen
    strcat(r, c + strlen(find)); // den restlichen String anhängen
  } else {
    r = malloc(strlen(str) + 1); // sonst: Kopie von str zurückgeben.
    strcpy(r, str);
  }
  return r;
}
Gruß
 
Zuletzt bearbeitet:
Zurück