/****************************************/
/* 替换字符串中的子字符串 */
/* char *source : 源字符串 */
/* char *sub : 子字符串 */
/* char *rep : 用于替换的字符串 */
/* 返回值 : 0(失败); 1(成功) */
/* */
/* 注意: 处理好的字符串放回到做为参数的source变量中 */
/* 因此, 作为变量传入的source应事前分配好足量 */
/* 的空间 */
/****************************************/
int replace(char *source, char *sub, char *rep){
char *tmp_source;
char *result;
char *pc1, *pc2, *pc3;
int isource, isub, irep;
isub = strlen(sub);
irep = strlen(rep);
isource= strlen(source);
if ('/0' == *sub || strstr(source, sub) == 0) {
return 0;
}
int length = ( (irep > isub) ? (float)strlen(source) / isub * irep + 1 : isource + 1 ) * sizeof(char);
result = (char *)malloc(length);
if (result == NULL) {
return 1;
}
memset(result, 0, length);
tmp_source = source;
pc1 = result;
while (*tmp_source != '/0') {
pc2 = tmp_source;
pc3 = sub;
while (*pc2 == *pc3 && *pc3 != '/0' && *pc2 != '/0')
pc2++, pc3++;
if ('/0' == *pc3) {
pc3 = rep;
while (*pc3 != '/0')
*pc1++ = *pc3++;
pc2--;
tmp_source = pc2;
} else {
*pc1++ = *tmp_source;
}
tmp_source++;
}
*pc1 = '/0';
memset(source, 0, strlen(source));
strcpy(source, result);
free(result);
return 0;
}