用C语言实现字符串替换功能

本文提供了一个使用C语言实现的字符串替换功能的代码示例。该示例通过自定义函数replace来查找并替换指定的子字符串,并附带了一个简单的测试案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

下面是用C语言实现字符串替换功能的代码:

char  *replace(char  *source,  char  *sub,  char  *rep) 
{ 
 char  *result; 
 /*pc1  是复制到结果result的扫描指针*/
 /*pc2  是扫描 source 的辅助指针*/
 /*pc3  寻找子串时,为检查变化中的source是否与子串相等,是指向sub的扫描指针 */
 /*找到匹配后,为了复制到结果串,是指向rep的扫描指针*/
 char  *pc1,  *pc2,  *pc3;     
 int  isource,  isub,  irep; 
 isub  = strlen(sub);   /*对比字符串的长度*/
 irep  = strlen(rep);   /*替换字符串的长度*/
 isource= strlen(source); /*源字符串的长度*/ 
 if(NULL == *sub)  
  return strdup(source); 
 /*申请结果串需要的空间*/
 result  = (char *)malloc(( (irep > isub) ? (float)strlen(source) / isub* irep+ 1:isource ) * sizeof(char));
 pc1  =  result; /*为pc1依次复制结果串的每个字节作准备*/
 while(*source  !=  NULL) 
 { 
  /*为检查source与sub是否相等作准备,为pc2,pc3 赋初值*/
   pc2  =  source; 
   pc3  =  sub;
  /* 出循环的(任一)条件是: 
      *  *pc2 不等于 *pc3 (与子串不相等) 
      *  pc2  到源串结尾 
      *  pc3  到源串结尾 (此时,检查了全部子串,source处与sub相等) 
      *****************************************************/
   while(*pc2  ==  *pc3  &&  *pc3  !=  NULL  &&  *pc2  !=  NULL) 
     pc2++,  pc3++; [Page]
  /* 如果找到了子串,进行以下处理工作*/
   if(NULL  ==  *pc3) 
   { 
     pc3  =  rep; 
  /*将替代串追加到结果串*/
     while(*pc3  !=  NULL) 
       *pc1++  =  *pc3++; 
     pc2--; 
     source  =  pc2; 
  /*   检查 source与sub相等的循环结束后, 
        * pc2 对应的位置是在 sub 中串结束符处。该是源串中下一个位置。 
        * 将 source 指向其前面一个字符。 
        ***************************************************/
   } 
   else /*如果没找到子串,下面复制source所指的字节到结果串*/ 
     *pc1++ = *source; 
   source++; /* 将source向后移一个字符*/ 
 }     
 *pc1  =  NULL;    
 return  result;
}


  以下为测试代码:

int main()
{
    char s1[] ="abbccdfdcdbbdcd";
   char s2[]="dcd";
   char s3[]="12345";
   char *p = replace(s1,s2,s3);
   printf("source=%s
",s1);
  puts(s1);
  printf("sub = %s
",s2);
  puts(s2);
  printf("replace string = %s",p);
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值