在最近的一個項目中,需要實現幾萬字符的查找替換,我使用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);
- }
- }