在近的一个项目中,需要实现几万字符的查找替换,我使用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);  
        }  
    }

  本文转载自:http://zouhui.blog.51cto.com/3827922/801333