用C語言實現字串替換功能

來源:互聯網
上載者:User

下面是用C語言實現字串替換功能的代碼:

char  *replace(char  *source,  char  *sub,  char  *rep)
{
 char  *result;
 /*pc1  是複製到結果result的掃描指標*/
 /*pc2  是掃描 source 的輔助指標*/
 /*pc3  尋找子串時,為檢查變化中的source是否與子串相等,是指向sub的掃描指標 */
 /*找到匹配後,為了複製到結果串,是指向rep的掃描指標*/
 char  *pc1,  *pc2,  *pc3;
 int  isource,  isub,  irep;
 isub  = strlen(sub);   /*對比字串的長度*/
 irep  = strlen(rep);   /*替換字串的長度*/
 isource= strlen(source); /*源字串的長度*/ 
 if(NULL == *sub)
  return strdup(source);
 /*申請結果串需要的空間*/
 result  = (char *)malloc(( (irep > isub) ? (float)strlen(source) / isub* irep+ 1:isource ) * sizeof(char));
 pc1  =  result; /*為pc1依次複製結果串的每個位元組作準備*/
 while(*source  !=  NULL)
 {
  /*為檢查source與sub是否相等作準備,為pc2,pc3 賦初值*/
   pc2  =  source;
   pc3  =  sub;
  /* 出迴圈的(任一)條件是: 
      *  *pc2 不等於 *pc3 (與子串不相等)
      *  pc2  到源串結尾
      *  pc3  到源串結尾 (此時,檢查了全部子串,source處與sub相等)
      *****************************************************/
   while(*pc2  ==  *pc3  &&  *pc3  !=  NULL  &&  *pc2  !=  NULL)
     pc2++,  pc3++; [Page]
  /* 如果找到了子串,進行以下處理工作*/
   if(NULL  ==  *pc3)
   {
     pc3  =  rep;
  /*將替代串追加到結果串*/
     while(*pc3  !=  NULL)
       *pc1++  =  *pc3++;
     pc2--;
     source  =  pc2;
  /*   檢查 source與sub相等的迴圈結束後,
        * pc2 對應的位置是在 sub 中串結束符處。該是源串中下一個位置。
        * 將 source 指向其前面一個字元。 
        ***************************************************/
   }
   else /*如果沒找到子串,下面複製source所指的位元組到結果串*/ 
     *pc1++ = *source;
   source++; /* 將source向後移一個字元*/ 
 }
 *pc1  =  NULL;
 return  result;
}

以下為測試代碼:

int main()
{
    char s1[] ="abbccdfdcdbbdcd";
   char s2[]="dcd";
   char s3[]="12345";
   char *p = replace(s1,s2,s3);
   printf("source=%s\n",s1);
  puts(s1);
  printf("sub = %s\n",s2);
  puts(s2);
  printf("replace string = %s",p);
return 0;
}

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。