工作中因为需要用到这样的函数,想偷懒,在网上找,没有找到,便自己写了一个.
//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;
}
}
}