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

 C++字符串高效查找替换
2012-03-09 13:25:40
标签: C++  字符串  休闲  高效  查找替换
原创作品,允许转载,转载时请务必以超链接形式标明文章  原始出处 、作者信息和本声明。否则将追究法律责任。 http://zouhui.blog.51cto.com/3827922/801333

  在最近的一个项目中,需要实现几万字符的查找替换,我使用CString的Replace花了两个小时,才完成替换。使用stl的string,花了大概6分钟。

  万般无赖,使用char*,自己实现查找替换吧,在1秒以内完成了替换。参考了网上的代码。

  直接上代码吧。

  
  
  1.  
  2. void CWebTransfer::Substitute(char *pInput, char *pOutput, char *pSrc, char *pDst)   
  3. {   
  4.     char *pi, *po, *p;   
  5.     int nSrcLen, nDstLen, nLen;   
  6.       
  7.     // 指向输入字符串的游动指针.   
  8.     pi = pInput;   
  9.     // 指向输出字符串的游动指针.   
  10.     po = pOutput;   
  11.     // 计算被替换串和替换串的长度.   
  12.     nSrcLen = strlen(pSrc);  
  13.     nDstLen = strlen(pDst);  
  14.       
  15.     // 查找pi指向字符串中第一次出现替换串的位置,并返回指针(找不到则返回null).   
  16.     p = strstr(pi, pSrc);   
  17.     if(p)   
  18.     {   
  19.         // 找到.   
  20.         while(p)   
  21.         {   
  22.             // 计算被替换串前边字符串的长度.   
  23.             nLen = (int)(p - pi);   
  24.             // 复制到输出字符串.   
  25.             memcpy(po, pi, nLen);   
  26.             memcpy(po + nLen, pDst, nDstLen);   
  27.             // 跳过被替换串.   
  28.             ppi = p + nSrcLen;   
  29.             // 调整指向输出串的指针位置.   
  30.             popo = po + nLen + nDstLen;   
  31.             // 继续查找.   
  32.             p = strstr(pi, pSrc);   
  33.         }   
  34.         // 复制剩余字符串.   
  35.         strcpy(po, pi);   
  36.     }   
  37.     else   
  38.     {   
  39.         // 没有找到则原样复制.   
  40.         strcpy(po, pi);   
  41.     }   
  42. }   

本文出自 “邹辉” 博客,请务必保留此出处http://zouhui.blog.51cto.com/3827922/801333

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值