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

本文详细解析了CWebTransfer类中的Substitute函数,该函数用于在字符串中查找并替换特定子串。通过实例代码展示了如何使用strstr函数定位目标子串,并通过复制和替换操作实现替换过程。此外,提供了替代实现方式,使得替换操作更为灵活。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  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. }   












为了替换,你必须先找到要替换的串的位置。 
string   s( "abcdefg "); 
string::size_type   sz   =   s.find( "def "); 

//   验证确实找到了 
if   (sz   !=   string::npos) 

        s.replace(sz,   3,   "yxz "); 
}



















试试这个函数。更多精彩,尽在:http://blog.youkuaiyun.com/mxclxp/archive/2004/08/25/84818.aspx(原创!!) 

////////////////////////////////////////////////////////////////////////// 
/* 
  *       功能:     把   "原始串 "   中所有的   "替换源串 "   替换成   "替换目的串 ",返回替换完 
                                        的结果。 
  *       意义:   此功能解决了   std::string   中替换功能的单一,方便了编程。 
  */ 
////////////////////////////////////////////////////////////////////////// 
std::string   stringReplace(const   std::string&   input,                                     //   原始串 
                                                                      const   std::string&   find,                                 //   替换源串 
                                                                      const   std::string&   replaceWith)   //   替换目的串 

              std::string   strOut(input); 
              int   curPos   =   0; 
  
              int   pos; 
              while((pos   =   strOut.find(find,   curPos))   !=   -1) 
              { 
                            strOut.replace(pos,   find.size(),   replaceWith);             //   一次替换 
                            curPos   =   pos   +   replaceWith.size();                                                 //   防止循环替换!! 
              } 
  
              return   strOut; 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值