Linux C字符串替換函數實例詳解
最近學習linux 的基礎編程知識,字符串替換函數,在網上找下資料,覺得這篇文章寫的不錯,記錄下來,和大家分享一下:
實例代碼:
#include <stdio.h>#include <string.h>#include <stdlib.h> /**** @author: cnscn@163.com* @reference: lovesnow1314@http://community.csdn.net/Expert/TopicView3.asp?id=5198221 ** 用新子串newstr替換源字符串src中的前len個字符內所包含的oldstr子串** @param char* dest 目標串,也就是替換后的新串* @param const char* src 源字符串,被替換的字符串* @param const char* oldstr 舊的子串,將被替換的子串* @param const char* newstr 新的子串* @param int len 將要被替換的前len個字符** @return char* dest 返回新串的地址**/char *strreplace(char *dest, char *src, const char *oldstr, const char *newstr, size_t len){//如果串相等,則直接返回if(strcmp(oldstr, newstr)==0)return src;//子串位置指針char *needle;//臨時內存區char *tmp;//把源串地址賦給指針dest,即讓dest和src都指向src的內存區域dest = src;//如果找到子串, 并且子串位置在前len個子串范圍內, 則進行替換, 否則直接返回while((needle = strstr(dest, oldstr)) && (needle -dest <= len)){//分配新的空間: +1 是為了添加串尾的'/0'結束符tmp=(char*)malloc(strlen(dest)+(strlen(newstr)-strlen(oldstr))+1);//把src內的前needle-dest個內存空間的數據,拷貝到arrstrncpy(tmp, dest, needle-dest);//標識串結束tmp[needle-dest]='/0';//連接arr和newstr, 即把newstr附在arr尾部, 從而組成新串(或說字符數組)arrstrcat(tmp, newstr);//把src中 從oldstr子串位置后的部分和arr連接在一起,組成新串arrstrcat(tmp, needle+strlen(oldstr));//把用malloc分配的內存,復制給指針retvdest = strdup(tmp);//釋放malloc分配的內存空間free(tmp);}return dest;}int main(){char *str="wo i love iyou";char *old="i";char *new="ILOVEYOUYA";char *dest;//分配內存空間: 大小 == src的長度 + newstr和oldstr長度差(可能是正負或0)+1printf("%s/n",strreplace(dest, str, old, new,1));printf("%s/n",strreplace(dest, str, old, new,5));printf("%s/n",strreplace(dest, str, old, new,40));return 0;}
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
新聞熱點
疑難解答
圖片精選