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

  在最近的一個項目中,需要實現幾萬字符的查找替換,我使用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. }   
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章