ANSI C 中並沒有提供 string replace 的函數,網上有一些自己實現的,不過大多有一個問題:不是全部替換。
例如,This is a test to test string replacing.
如果要替換 test 成 example,全部替換的結果應該是:This is a example to example string replacing.
網上很多的實現都是只要找到一個結果就返回了。
這裡我寫了一個全部替換的函數:
char * strrepl(const char * src, char * dst, size_t dst_size, const char * search, const char * replace_with) {<br /> char * replace_buf = (char *)malloc(dst_size);<br /> if (replace_buf) {<br /> replace_buf[0] = 0;<br /> char * p = (char *)src;<br /> char * pos = NULL;<br /> while ( (pos = strstr(p, search)) != NULL ) {<br /> size_t n = (size_t)(pos-p);<br /> strncat(replace_buf, p, n > dst_size ? dst_size : n);<br /> strncat(replace_buf, replace_with, dst_size-strlen(replace_buf)-1);<br /> p = pos + strlen(search);<br /> }<br /> snprintf(dst, dst_size, "%s%s", replace_buf, p);<br /> free(replace_buf);<br /> }<br /> return dst;<br />}<br />