2009-04-25 01:47

[C語言] 字串取代(str_replace)

strlen , strcpy , strstr , strcat , malloc
  1. #include <stdio.h> 
  2. #include <string.h> 
  3. #include <stdlib.h> 
  4.  
  5. /* str_replace [字串取代] 
  6. * @param {char*} source 原始的文字 
  7. * @param {char*} find 搜尋的文字   
  8. * @param {char*} rep 替換的文字 
  9. * */ 
  10. char *str_replace (char *source, char *find,  char *rep){ 
  11.    // 搜尋文字的長度 
  12.    int find_L=strlen(find); 
  13.    // 替換文字的長度 
  14.    int rep_L=strlen(rep); 
  15.    // 結果文字的長度 
  16.    int length=strlen(source)+1; 
  17.    // 定位偏移量 
  18.    int gap=0; 
  19.  
  20.    // 建立結果文字,並複製文字 
  21.    char *result = (char*)malloc(sizeof(char) * length); 
  22.    strcpy(result, source);     
  23.  
  24.    // 尚未被取代的字串 
  25.    char *former=source; 
  26.    // 搜尋文字出現的起始位址指標 
  27.    char *location= strstr(former, find); 
  28.  
  29.    // 漸進搜尋欲替換的文字 
  30.    while(location!=NULL){ 
  31.        // 增加定位偏移量 
  32.        gap+=(location - former); 
  33.        // 將結束符號定在搜尋到的位址上 
  34.        result[gap]='\0'; 
  35.  
  36.        // 計算新的長度 
  37.        length+=(rep_L-find_L); 
  38.        // 變更記憶體空間 
  39.        result = (char*)realloc(result, length * sizeof(char)); 
  40.        // 替換的文字串接在結果後面 
  41.        strcat(result, rep); 
  42.        // 更新定位偏移量 
  43.        gap+=rep_L; 
  44.  
  45.        // 更新尚未被取代的字串的位址 
  46.        former=location+find_L; 
  47.        // 將尚未被取代的文字串接在結果後面 
  48.        strcat(result, former); 
  49.  
  50.        // 搜尋文字出現的起始位址指標 
  51.        location= strstr(former, find); 
  52.    }     
  53.  
  54.    return result; 
  55.  
  56. } 
  57.  
  58.  
  59. int main(){ 
  60.    char* str1 = "this is a string of characters"; 
  61.    char* str2 = str_replace(str1, "is","FFF"); 
  62.  
  63.    printf( "str1: '%s'\n", str1 ); 
  64.    printf( "str2: '%s'\n", str2 ); 
  65.  
  66.    _getch();     
  67.    return 0; 
  68. } 


參考來源:
Standard C String and Character [C++ Reference]

0 回應: