纯SDK写的字符串替换函数

工作中因为需要用到这样的函数,想偷懒,在网上找,没有找到,便自己写了一个.

//lpSrc----[in,out]dest string,after replacing string,it will contain result string

//lpOldStr----string which will be replaced

//lpNewStr---- new string for replacing

void ReplaceString(LPTSTR& lpSrc, LPTSTR lpOldStr, LPTSTR lpNewStr)
{
 if(!lpSrc || !lpOldStr || !lpNewStr)
  return;
 
 int nOldLen =  strlen(lpOldStr);
 int nNewLen =  strlen(lpNewStr);
 
 int nCount = 0;
 LPTSTR lpszStart = lpSrc;
 LPTSTR lpszEnd  = lpSrc + strlen(lpSrc);
 LPTSTR lpszTarget;
 LPTSTR lpTempSrc;
 
 while(lpszStart < lpszEnd)
 {
  while((lpszTarget = strstr(lpszStart, lpOldStr)) != NULL)
  {
   nCount++;
   lpszStart = lpszTarget + nOldLen;
  }
  lpszStart += strlen(lpszStart) + 1;
 }
 
 if(nCount > 0)
 {
  int nOldSrcLen = strlen(lpSrc) + 1;
  int nNewSrcLen = nOldSrcLen + (nNewLen-nOldLen)*nCount;
  
  if(nNewSrcLen > nOldSrcLen)
  {
   lpTempSrc = new TCHAR[nOldSrcLen];
   if(lpTempSrc)
   {
    memset(lpTempSrc, 0, nOldSrcLen);
    memcpy(lpTempSrc, lpSrc, nOldSrcLen);
    delete []lpSrc;
    lpSrc = new TCHAR[nNewSrcLen];
    if(lpSrc)
    {
     memset(lpSrc, 0 , nNewSrcLen);
     memcpy(lpSrc, lpTempSrc, nOldSrcLen);
    }
    delete []lpTempSrc;
    lpTempSrc = NULL;
   }
  }
  lpszStart = lpSrc;
  lpszEnd = lpSrc + strlen(lpSrc);
  while(lpszStart < lpszEnd)
  {
   while((lpszTarget = strstr(lpszStart, lpOldStr)) != NULL)
   {
    int nBalance = nOldSrcLen - (lpszTarget - lpSrc + nOldLen);
    memmove(lpszTarget + nNewLen, lpszTarget + nOldLen, nBalance * sizeof(TCHAR));
    memcpy(lpszTarget, lpNewStr, nNewLen * sizeof(TCHAR));
    lpszStart = lpszTarget + nNewLen;
    nOldSrcLen += (nNewLen - nOldLen);
   }
   lpszStart += strlen(lpszStart) + 1;
  }
 }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值