注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

snoopyxdy的博客

https://github.com/DoubleSpout

 
 
 

日志

 
 

C/C++ 字符串replace替换函数  

2012-12-12 22:17:44|  分类: C++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
基于char* 

char*replace(char*src, char*sub, char*dst)
{
int pos =0;
int offset =0;
int srcLen, subLen, dstLen;
char*pRet = NULL;


srcLen = strlen(src);
subLen = strlen(sub);
dstLen = strlen(dst);
pRet = (char*)malloc(srcLen + dstLen - subLen +1);//(外部是否该空间)if (NULL != pRet)
{
pos = strstr(src, sub) - src;
memcpy(pRet, src, pos);
offset += pos;
memcpy(pRet + offset, dst, dstLen);
offset += dstLen;
memcpy(pRet + offset, src + pos + subLen, srcLen - pos - subLen);
offset += srcLen - pos - subLen;
*(pRet + offset) ='\0';
}
return pRet;
}

说明:

//参数,src 字符串源,sub想要替换的字符串,dst,用来替换的字符串
char*replace(char*src, char*sub, char*dst)
{
//记录当前指针位置
int pos =0;
//记录偏移

int offset =0;
//字符串长度
int srcLen, subLen, dstLen;
//返回内容

char*pRet = NULL;


//求得各字符串长度

srcLen = strlen(src);
subLen = strlen(sub);
dstLen = strlen(dst);
//申请替换后的字符串缓冲区。用dst替换sub,所以应该是srclen-sublen+dstlen,+1流出'\0'位置
pRet = (char*)malloc(srcLen + dstLen - subLen +1);//(外部是否该空间)if (NULL != pRet)
{
//strstr查找sub字符串出现的指针。该指针减去src地址。得到相对位置
pos = strstr(src, sub) - src;
//拷贝src字符串,从首地址开始,pos个字符。
memcpy(pRet, src, pos);
//增加偏移位置到pos
offset += pos;
//拷贝dst到返回内容中。
memcpy(pRet + offset, dst, dstLen);
//重新定位偏移
offset += dstLen;
//拷贝src中,sub字符串后面的字符串到pRet中
memcpy(pRet + offset, src + pos + subLen, srcLen - pos - subLen);
//重新定位偏移
offset += srcLen - pos - subLen;
//最后添加字符串结尾标记'\0'
*(pRet + offset) ='\0';
}
//返回新构造的字符串
return pRet;
}

基于C++ 的string类

inline void CSreplace(std::string& s1,std::string& s2,std::string& s3,int count)
{
std::string::size_type pos=0;
std::string::size_type a=s2.size();
std::string::size_type b=s3.size();

if(count == -1){
while((pos=s1.find(s2,pos))!=std::string::npos)
{
s1.replace(pos,a,s3);
pos+=b;
}
}
else{
int c = 0;
while((pos=s1.find(s2,pos))!=std::string::npos)
{
s1.replace(pos,a,s3);
pos+=b;
if(++c == count)
return;
}
}
}

  评论这张
 
阅读(14232)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016