字串的替換所有指定的子串 C語言

2021-10-03 07:02:24 字數 1395 閱讀 6601

使用者輸入3個字串,然後把在第乙個字串**現的所有第 2 個字串替換成第 3 個字串,最後輸出新的字串。

比如:第乙個字串:str: abcdefcdg ;第二個字串:sub1: cd ;第三個字串:sub2: 123

替換後的結果:ab123ef123g

使用strstr逐個尋找子串,然後替換;替換的時候分為幾步:

1. 將sub後面的內容向前或向前移動(因為replace可能大於sub也可能小於sub,所以可能向前複製或者向後複製),騰出空間

這裡有個小技巧,假設子串開始的位置是p,那麼被移動記憶體的起始位置是 p + sublen,移動到的位置是 p + replacelen,長度是replacelen; 

2. 把replace拷貝到騰出的空間中。

3. 迴圈指標p移動到replace後的乙個位置,再迴圈到前面用strstr查詢下乙個子串,再迴圈處理;如果strstr在後面找不到子串就直接退出了

注意:因為replace可能和sub長度不相等,所以需要不斷更新長度,新長度為 len - sublen + replacesub; 

int strreplaceall(char * str, char * sub, char * replace)	

char * p = null;

char * t = null;

char * q = null;

char * dst = null;

char * src = null;

int len = strlen(str);

int len1 = strlen(sub);

int len2 = strlen(replace);

p = str;

while('\0' != *p)

src = q + len1; /*源頭, 原有sub後的乙個字元*/

dst = q + len2; /*目的,放完replace後的乙個字元*/

memcpy(dst, src, t - src); /*原有字串後移,放出空間*/

memcpy(q, replace, len2); /*將replace字元拷貝進來*/

len = len + len2 - len1;

p = q + len2; /* p 下一輪replace後的乙個字元 */ }

str[len] = '\0'; /*通過'\0'表示結尾*/

}void teststrreplaceall(void)

gcc main.c str.c -g -o a.exe

************  teststrreplaceall ************

after replace all, str is : ab123ef123g

string替換所有指定字串(C )

c 的string提供了replace方法來實現字串的替換,但是對於將字串中某個字串全部替換這個功能,string並沒有實現,我們今天來做的就是這件事。首先明白乙個概念,即string替換所有字串,將 12212 這個字串的所有 12 都替換成 21 結果是什麼?可以是22211,也可以是21221...

string替換所有指定字串(C )

c 的string提供了replace方法來實現字串的替換,但是對於將字串中某個字串全部替換這個功能,string並沒有實現,我們今天來做的就是這件事。首先明白乙個概念,即string替換所有字串,將 12212 這個字串的所有 12 都替換成 21 結果是什麼?可以是22211,也可以是21221...

string替換所有指定字串(C )

c 的string提供了replace方法來實現字串的替換,但是對於將字串中某個字串全部替換這個功能,string並沒有實現,我們今天來做的就是這件事。首先明白乙個概念,即string替換所有字串,將 12212 這個字串的所有 12 都替換成 21 結果是什麼?可以是22211,也可以是21221...