Linux C字符串替換函數(shù)實(shí)例詳解
Linux C字符串替換函數(shù)實(shí)例詳解
最近學(xué)習(xí)linux 的基礎(chǔ)編程知識(shí),字符串替換函數(shù),在網(wǎng)上找下資料,覺得這篇文章寫的不錯(cuò),記錄下來,和大家分享一下:
實(shí)例代碼:
#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個(gè)字符內(nèi)所包含的oldstr子串
*
* @param char* dest 目標(biāo)串,也就是替換后的新串
* @param const char* src 源字符串,被替換的字符串
* @param const char* oldstr 舊的子串,將被替換的子串
* @param const char* newstr 新的子串
* @param int len 將要被替換的前l(fā)en個(gè)字符
*
* @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;
//臨時(shí)內(nèi)存區(qū)
char *tmp;
//把源串地址賦給指針dest,即讓dest和src都指向src的內(nèi)存區(qū)域
dest = src;
//如果找到子串, 并且子串位置在前l(fā)en個(gè)子串范圍內(nèi), 則進(jìn)行替換, 否則直接返回
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個(gè)內(nèi)存空間的數(shù)據(jù),拷貝到arr
strncpy(tmp, dest, needle-dest);
//標(biāo)識(shí)串結(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的長(zhǎng)度 + newstr和oldstr長(zhǎng)度差(可能是正負(fù)或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;
}
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
- 整理Linux中字符串的相關(guān)操作技巧
- linux特殊字符及其作用大全
- Linux下MySQL 5.5/5.6的修改字符集編碼為UTF8的方法
- Linux shell腳本中字符串連接的方法
- Linux內(nèi)核設(shè)備驅(qū)動(dòng)之虛擬文件系統(tǒng)筆記整理
- Linux內(nèi)核設(shè)備驅(qū)動(dòng)之系統(tǒng)調(diào)用筆記整理
- Linux內(nèi)核設(shè)備驅(qū)動(dòng)之內(nèi)核的調(diào)試技術(shù)筆記整理
- Linux內(nèi)核設(shè)備驅(qū)動(dòng)之內(nèi)核中鏈表的使用筆記整理
- Linux內(nèi)核設(shè)備驅(qū)動(dòng)之proc文件系統(tǒng)筆記整理
- Linux內(nèi)核設(shè)備驅(qū)動(dòng)之高級(jí)字符設(shè)備驅(qū)動(dòng)筆記整理
- Linux內(nèi)核設(shè)備驅(qū)動(dòng)之Linux內(nèi)核模塊加載機(jī)制筆記整理
- Linux內(nèi)核設(shè)備驅(qū)動(dòng)地址映射筆記整理
- Linux內(nèi)核設(shè)備驅(qū)動(dòng)之Linux內(nèi)核基礎(chǔ)筆記整理
- Linux內(nèi)核設(shè)備驅(qū)動(dòng)之字符設(shè)備驅(qū)動(dòng)筆記整理
相關(guān)文章
Linux系統(tǒng)下部署項(xiàng)目的設(shè)置方法
這篇文章主要介紹了Linux系統(tǒng)下部署項(xiàng)目的教程詳解,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-10-10
一文詳解Linux三種網(wǎng)絡(luò)設(shè)置方式
我們?cè)谑褂锰摂M機(jī)搭建linux系統(tǒng)后,常常需要設(shè)置系統(tǒng)網(wǎng)絡(luò)連接,以方便系統(tǒng)進(jìn)行上網(wǎng)或其他系統(tǒng)連接系統(tǒng)進(jìn)行操作,在linux中網(wǎng)絡(luò)連接分了三類:橋接模式,僅主機(jī)模式,NAT模式,本文我們將對(duì)這三種模式進(jìn)行講解,感興趣的同學(xué)可以參考閱讀2023-06-06
Linux下簡(jiǎn)易進(jìn)度條的實(shí)現(xiàn)代碼
下面小編就為大家?guī)硪黄狶inux下簡(jiǎn)易進(jìn)度條的實(shí)現(xiàn)代碼。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-01-01
Linux使用crontab實(shí)現(xiàn)定時(shí)拆分日志與清理過期文件
crontab是一個(gè)用于管理定時(shí)任務(wù)的工具,可以讓在特定的時(shí)間間隔內(nèi)自動(dòng)運(yùn)行腳本或命令,本文將使用crontab實(shí)現(xiàn)定時(shí)拆分日志與清理過期文件,需要的可以參考下2024-04-04
Centos 7.4中的遠(yuǎn)程訪問控制的實(shí)現(xiàn)方法
這篇文章主要介紹了Centos 7.4中的遠(yuǎn)程訪問控制的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
SpringBoot + Vue 項(xiàng)目部署上線到Linux 服務(wù)器的教程詳解
這篇文章主要介紹了SpringBoot + Vue 項(xiàng)目部署上線到Linux 服務(wù)器,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08
linux下如何創(chuàng)建守護(hù)進(jìn)程的步驟
本篇文章主要介紹了linux下如何創(chuàng)建守護(hù)進(jìn)程的步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07
Linux/Unix關(guān)于時(shí)間和時(shí)間戳的命令行
這篇文章主要介紹了Linux/Unix關(guān)于時(shí)間和時(shí)間戳的命令行以及輸出的樣式區(qū)別,一起來學(xué)習(xí)下吧。2017-12-12

