在最近的一个项目中,需要实现几万字符的查找替换,我使用CString的Replace花了两个小时,才完成替换。使用stl的string,花了大概6分钟。
万般无赖,使用char*,自己实现查找替换吧,在1秒以内完成了替换。参考了网上的代码。
直接上代码吧。
void CWebTransfer::Substitute(char *pInput, char *pOutput, char *pSrc, char *pDst)
{
char *pi, *po, *p;
int nSrcLen, nDstLen, nLen;
// 指向输入字符串的游动指针。
pi = pInput;
// 指向输出字符串的游动指针。
po = pOutput;
// 计算被替换串和替换串的长度。
nSrcLen = strlen(pSrc);
nDstLen = strlen(pDst);
// 查找pi指向字符串中第一次出现替换串的位置,并返回指针(找不到则返回null)。
p = strstr(pi, pSrc);
if(p)
{
// 找到。
while(p)
{
// 计算被替换串前边字符串的长度。
nLen = (int)(p - pi);
// 复制到输出字符串。
memcpy(po, pi, nLen);
memcpy(po + nLen, pDst, nDstLen);
// 跳过被替换串。
ppi = p + nSrcLen;
// 调整指向输出串的指针位置。
popo = po + nLen + nDstLen;
// 继续查找。
p = strstr(pi, pSrc);
}
// 复制剩余字符串。
strcpy(po, pi);
}
else
{
// 没有找到则原样复制。
strcpy(po, pi);
}
}