纯SDK写的字符串替换函数

原创 2006年05月17日 09:56:00

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

//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;
  }
 }
}

相关文章推荐

JAVA 中split的用法将字符串变成数组,利用SPLIT方法写的JAVA里的字符串替换函数(转)

 package   src;     import   java.util.regex.PatternSyntaxException;     import   java.lang.Null...

自己写的字符串函数代码

  • 2013年04月02日 11:41
  • 1.57MB
  • 下载

bash写的字符串常用函数

  • 2014年04月23日 13:08
  • 137KB
  • 下载

实现一个replace函数替换掉指定c串中子字符串

基本思路,先扫描source字符串, 记录下所有

纯C++ 字符串处理函数大全源码

  • 2011年03月29日 13:57
  • 3KB
  • 下载

php替换字符串函数strtr()和str_repalce()区别

php中替换函数主要有strtr(),str_repalce()这两个函数,但你们都知道他们这两个函数的区别和用法吗? 先来看看这个php字符串替换函数 strtr()的两种用法: strtr...

转贴 有关js 函数验证和字符串查找替换的方法

/* ****************************************** 字符串函数扩充 ...
  • GGCos
  • GGCos
  • 2011年04月15日 09:51
  • 574

【Day65】php常用字符串转换,替换,计算,截取,加密函数实例

nl2br 功能:化换行符为
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:纯SDK写的字符串替换函数
举报原因:
原因补充:

(最多只允许输入30个字)