关闭

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

发表于:2013-4-28 09:23

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:VeiwoZouhui    来源:51Testing软件测试网采编

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

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

  直接上代码吧。

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

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

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号