C语言中替换字符串中的子字符串(WIN)

/****************************************/
/*  替换字符串中的子字符串                                         */

/*  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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值