关闭

纯SDK写的字符串替换函数

2311人阅读 评论(2) 收藏 举报

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

//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
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:95878次
    • 积分:1313
    • 等级:
    • 排名:千里之外
    • 原创:25篇
    • 转载:3篇
    • 译文:0篇
    • 评论:55条
    文章分类
    最新评论