Linux C字符串替換函數(shù)實例詳解
更新時間:2017年01月28日 09:48:05 投稿:lqh
這篇文章主要介紹了Linux C字符串替換函數(shù)實例詳解的相關(guān)資料,需要的朋友可以參考下
Linux C字符串替換函數(shù)實例詳解
最近學(xué)習(xí)linux 的基礎(chǔ)編程知識,字符串替換函數(shù),在網(wǎng)上找下資料,覺得這篇文章寫的不錯,記錄下來,和大家分享一下:
實例代碼:
#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中的前l(fā)en個字符內(nèi)所包含的oldstr子串 * * @param char* dest 目標串,也就是替換后的新串 * @param const char* src 源字符串,被替換的字符串 * @param const char* oldstr 舊的子串,將被替換的子串 * @param const char* newstr 新的子串 * @param int len 將要被替換的前l(fā)en個字符 * * @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; //臨時內(nèi)存區(qū) char *tmp; //把源串地址賦給指針dest,即讓dest和src都指向src的內(nèi)存區(qū)域 dest = src; //如果找到子串, 并且子串位置在前l(fā)en個子串范圍內(nèi), 則進行替換, 否則直接返回 while((needle = strstr(dest, oldstr)) && (needle -dest <= len)) { //分配新的空間: +1 是為了添加串尾的'\0'結(jié)束符 tmp=(char*)malloc(strlen(dest)+(strlen(newstr)-strlen(oldstr))+1); //把src內(nèi)的前needle-dest個內(nèi)存空間的數(shù)據(jù),拷貝到arr strncpy(tmp, dest, needle-dest); //標識串結(jié)束 tmp[needle-dest]='\0'; //連接arr和newstr, 即把newstr附在arr尾部, 從而組成新串(或說字符數(shù)組)arr strcat(tmp, newstr); //把src中 從oldstr子串位置后的部分和arr連接在一起,組成新串a(chǎn)rr strcat(tmp, needle+strlen(oldstr)); //把用malloc分配的內(nèi)存,復(fù)制給指針retv dest = strdup(tmp); //釋放malloc分配的內(nèi)存空間 free(tmp); } return dest; } int main() { char *str="wo i love iyou"; char *old="i"; char *new="ILOVEYOUYA"; char *dest; //分配內(nèi)存空間: 大小 == src的長度 + newstr和oldstr長度差(可能是正負或0)+1 printf("%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; }
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
您可能感興趣的文章:
- 整理Linux中字符串的相關(guān)操作技巧
- linux特殊字符及其作用大全
- Linux下MySQL 5.5/5.6的修改字符集編碼為UTF8的方法
- Linux shell腳本中字符串連接的方法
- Linux內(nèi)核設(shè)備驅(qū)動之虛擬文件系統(tǒng)筆記整理
- Linux內(nèi)核設(shè)備驅(qū)動之系統(tǒng)調(diào)用筆記整理
- Linux內(nèi)核設(shè)備驅(qū)動之內(nèi)核的調(diào)試技術(shù)筆記整理
- Linux內(nèi)核設(shè)備驅(qū)動之內(nèi)核中鏈表的使用筆記整理
- Linux內(nèi)核設(shè)備驅(qū)動之proc文件系統(tǒng)筆記整理
- Linux內(nèi)核設(shè)備驅(qū)動之高級字符設(shè)備驅(qū)動筆記整理
- Linux內(nèi)核設(shè)備驅(qū)動之Linux內(nèi)核模塊加載機制筆記整理
- Linux內(nèi)核設(shè)備驅(qū)動地址映射筆記整理
- Linux內(nèi)核設(shè)備驅(qū)動之Linux內(nèi)核基礎(chǔ)筆記整理
- Linux內(nèi)核設(shè)備驅(qū)動之字符設(shè)備驅(qū)動筆記整理
相關(guān)文章
linux負載均衡總結(jié)性說明 四層負載和七層負載有什么區(qū)別
這篇文章主要為大家詳細介紹了linux負載均衡的相關(guān)資料,什么是負載均衡?四層負載和七層負載有什么區(qū)別?具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04Yum安裝中出現(xiàn)錯誤mirrorlist.txt的解決方法
前幾天在使用Yum install命令安裝軟件的時候一直提示一個mirrorlist.txt錯誤,通過查找相關(guān)的資料現(xiàn)在找到了解決的方法,所以這篇文章就整理出來和大家分享一下,有同樣遇到這個問題的朋友們可以參考借鑒下。2016-10-10利用win10自帶虛擬機hyper-v安裝centos7方法詳解
利用VMware安裝CentOS系統(tǒng)相信大家都比較熟悉了,今天為大家介紹一下利用Win10自帶的虛擬機hyper-v來安裝CentOS,hyper-v與VMware的區(qū)別還是挺大的2018-10-10