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

C語言 字符串替換、取子串函數實現

編輯:關於C語言
 

/************
*   函數原型:char* str_rep(char *str, const char *strSearch, const char *strReplace)  

*   描述:字符串替換,查找字符串,把字符串中strSearch字符串替換為strReplace   
*   輸入參數:三個字符串  
*   輸出參數:替換後的str
*   返回值:成功返回指向str的指針,失敗(如傳入NULL參數)返回NULL
*   分析:字符替換過程中不考慮內存溢出問題,str如果被替換後變長,要有足夠空間容納新增字符和null字符
*   改進:可以增加一個參數,傳入所能容納的最大長度,在函數裡必要時判斷新串是否到達最大長度
***************/

#include <stdio.h>
#include <string.h>

char* str_rep(char *str, const char *strSearch, const char *strReplace)  
{
char *pTemp = str;
int iStrSearlen, iStrReplen, iTemp;

if (str == NULL || strSearch == NULL || strReplace == NULL)
{
   return NULL;
}

iStrSearlen = strlen(strSearch);  
iStrReplen = strlen(strReplace);
iTemp = iStrSearlen - iStrReplen;

if( iStrSearlen == 0 ) //如果查找字符串的長度為0(調用strstr()函數前必須考慮的),直接返回
{  
   return str;
}

while(pTemp = strstr(pTemp, strSearch)) //匹配到字符串,進行替換。
{
   const char *p = strReplace;
   if(iTemp < 0)
   {
    int i = strlen(str);
    while (i >= pTemp-str+iStrSearlen)         //i >= pTemp-str+iStrlen
    {
     str[i-iTemp] = str[i];  //整體向後移動-iTemp位(包括最後的'\0'),注意iTemp<0
     i--;
    }
    while(*p != '\0')         //替換字符串
    {  
     *pTemp++ = *p++;  
    }
   }
   else
   {
    while(*p != '\0')
    {  
     *pTemp++ = *p++;  
    }
   
    if(iTemp > 0)          //如果匹配字符比替換字符長,則整體左移iTemp位
    {  
     strcpy(pTemp, pTemp+iTemp);
    }
   }
}   
return str;
}

//用strncpy(substr, str+begin, len);就是substr了
char* str_sub(char *substr, const char *str, size_t begin, size_t len)
{
strncpy(substr, str+begin, len);
substr[len] = '\0';

return substr;
}

int main()
{
    char str1[10]="123456789";
    char str2[10]="abcdefghi";
    char *p;
    str1[6]='\0';

    puts(str1);
    p = str_rep(str1, "12", "1212");
    if (p)
    {
        puts(p);
    }
    puts(str1);
    puts(str_sub(str2, str1, 2, 3));
    puts(str2);

    return 0;
}

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