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

基于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; } } }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值