程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 用C語言實現字符串替換功能

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

編輯:關於C語言

下面是用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;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved