//// You must free the result if result is non-NULL. //char *str_replace(char *orig, char *rep, char *with) { // char *result; // the return string // char *ins; // the next insert point // char *tmp; // varies // int len_rep; // length of rep (the string to remove) // int len_with; // length of with (the string to replace rep with) // int len_front; // distance between rep and end of last rep // int count; // number of replacements // // sanity checks and initialization // if (!orig || !rep) // return null; // len_rep = len(rep); // if (len_rep == 0) // return null; // empty rep causes infinite loop during count // if (!with) // with = ""; // len_with = len(with); // // count the number of replacements needed // ins = orig; // for (count = 0; tmp = instr(ins, rep); ++count) { // ins = tmp + len_rep; // } // tmp = result = malloc(len(orig) + (len_with - len_rep) * count + 1); // if (!result) // return null; // // first time through the loop, all the variable are set correctly // // from here on, // // tmp points to the end of the result string // // ins points to the next occurrence of rep in orig // // orig points to the remainder of orig after "end of rep" // while (count--) { // ins = instr(orig, rep); // len_front = ins - orig; // tmp = mid(tmp, orig, len_front) + len_front; // tmp = strcpy(tmp, with) + len_with; // orig += len_front + len_rep; // move to next "end of rep" // } // strcpy(tmp, orig); // return result; //}