您的位置:首页 > 编程语言 > C语言/C++

C++字符串高效查找替换

2012-09-30 19:31 162 查看
C++字符串高效查找替换

2012-03-09 13:25:40

标签:C++ 字符串 休闲 高效 查找替换

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://zouhui.blog.51cto.com/3827922/801333

  在最近的一个项目中,需要实现几万字符的查找替换,我使用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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: