Originariamente inviato da babel.91
Prima dell'ultimo ciclo for devi incrementare la variabile k di j e non di 1.
Sul tuo esempio funziona, su altri casi non so, anche perché non credo di aver compreso fino in fondo il perché di quei cicli. :master:
Ma se puoi usare le funzioni in string.h... sarà che io son pigro, ma...
Codice PHP:
char *replace(char *w, int i, int j, char *s)
{
char *risultato = (char*) malloc(strlen(w)*sizeof(char));
strcpy(risultato, w);
strncpy(risultato + i, s, j);
return risultato;
}
Assumendo che l'input sia corretto, in caso contrario non so come si comportino strcpy() e strncpy().
Questa funzione non è corretta, forse mi sono spiegato male io qual'è l'obiettivo. Comunque ho trovato la solzione al problema originale (cioè ricreare una substr come quella del C++), ed il codice è:
codice:
void replace(char *w, int i, int j, char *s)
{
char *temp = (char *)malloc((strlen(w)+j-1)*sizeof(char));
int k=0; int a=0;
while(k<i)
{
char t[2] = {w[k], 0};
strcat(temp, t);
k++;
}
strcat(temp,s);
k = k+j;
for(k; k<strlen(w);k++)
{
char ttt[2] = {w[k], 0};
strcat(temp,ttt);
}
w = (char *)realloc(w,(strlen(w)+j-1)*sizeof(char));
strcpy(w,temp);
free(temp);
}
adesso la funzione è void in quanto agisce direttamente sulla stringa w (che sarebbe la stringa chiamante della controparte C++).