一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Linux C字符串替换函数实例详解

时间:2017-03-08 编辑:简简单单 来源:一聚教程网

最近学习linux 的基础编程知识,字符串替换函数,在网上找下资料,觉得这篇文章写的不错,记录下来,和大家分享一下:

实例代码:

 代码如下复制代码

#include

#include

#include

/**

*

* @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,constchar*oldstr,constchar*newstr,size_tlen)

{

//如果串相等,则直接返回

if(strcmp(oldstr, newstr)==0)

returnsrc;

 

//子串位置指针

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个内存空间的数据,拷贝到arr

strncpy(tmp, dest, needle-dest);

 

//标识串结束

tmp[needle-dest]='\0'

 

//连接arr和newstr, 即把newstr附在arr尾部, 从而组成新串(或说字符数组)arr

strcat(tmp, newstr);

 

//把src中 从oldstr子串位置后的部分和arr连接在一起,组成新串arr

strcat(tmp, needle+strlen(oldstr));

 

//把用malloc分配的内存,复制给指针retv

dest = strdup(tmp);

 

//释放malloc分配的内存空间

free(tmp);

}

 

returndest;

}

 

intmain()

{

char*str="wo i love iyou";

char*old="i";

char*new="ILOVEYOUYA";

 

char*dest;

//分配内存空间: 大小 == 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));

 

return0;

}

热门栏目