#include #include #include #define TRUE 0 #define FALSE -1 void strchg(char *buf, const char *str1, const char *str2); void main(void){ char str[128]; printf("** TESTCHG: 文字列の変換 **\n"); getchar(); strcpy(str, "facabcxbadd"); printf("[%d] str = [%s]\n", __LINE__, str); getchar(); printf("abc--> <123> \n"); strchg(str, "abc", " <123> "); printf("[%d] str = [%s]\n", __LINE__, str); getchar(); } /*********************************************************/ void strchg(char *buf, const char *str1, const char *str2) /*********************************************************/ { char* tmp, *p; long tmplen; while((p = strstr(buf, str1)) != NULL){/* while */ /* 見つからなくなるまで繰り返す p は旧文字列の先頭を指している */ *p = '\0'; /* 元の文字列を旧文字列の直前で区切って */ p += strlen(str1); /* ポインタを旧文字列の次の文字へ */ tmplen = strlen(p) + 1; tmp = (char*)malloc(tmplen); strcpy(tmp, p); /* 旧文字列から後を保存 */ strcat(buf, str2); /* 新文字列をその後につなぎ */ strcat(buf, tmp); /* さらに残りをつなぐ */ free(tmp); }/*while */ }