#include<stdio.h> #include <malloc.h> #include <string.h> char* fstr(char* str, const char* subs) { char* t = (char*)malloc(strlen(subs) + 1); char* ps = str; int i; int slen = strlen(subs); *(t + slen) = 0; while (strlen(ps) >= slen) { for (i = 0; i < slen; ++i) { *(t + i) = *(ps + i); } if (strcmp(t, subs) == 0) { free(t); return ps; } ++ps; } free(t); return NULL; } char *replace(char *str, const char *before, const char* after) { if (strcmp(before, after) == 0) return str; char *ps = str; char* tmps; int fl,i; while (ps = fstr(ps, before)) { tmps = (char*)malloc(ps - str + strlen(after) + 1); for (i = 0; i < ps - str; ++i) *(tmps + i) = *(str + i); *(tmps + (ps - str)) = 0; strcat(tmps, after); ps += strlen(before); tmps = (char*)realloc(tmps, strlen(tmps) + strlen(ps) + 1); fl = strlen(tmps); strcat(tmps, ps); strcpy(str, tmps); ps = str + fl; free(tmps); } return str; } int main() { char str[200] = "1223344222333444"; printf("%s\n", replace(str, "22", "ABC")); return 0; }