c语言 替代字符串,常见C语言面试题之三:字符串替代

#include "string.h"

#include "malloc.h"

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;

isource = (int)strlen(source);

isub = (int)strlen(sub);

irep = (int)strlen(rep);

if(*sub==NULL)

return strdup(source);

//申请结果串需要的空间

int size = (int)( (irep>isub)?(float)strlen(source)/isub*irep+1 : isource );

result = (char *)malloc(size*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++;

}

//如果找到了子串,进行以下处理工作

if(*pc3==NULL)

{

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 _tmain(int argc, _TCHAR* argv[])

{

char Source[] = "abbccdfdcdbbdccd";

char Sub[] = "bb";

char Rep[] = "*****";

char *p = replace(Source, Sub, Rep);

printf("Source:%s\n",Source);

printf("Sub:%s\n",Sub);

printf("Rep:%s\n",Rep);

printf("Result:%s\n",p);

return 0;

}

--------------------next---------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值