Linux C字符串替换函数实例详解
LinuxC字符串替换函数实例详解
最近学习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子串
*
*@paramchar*dest目标串,也就是替换后的新串
*@paramconstchar*src源字符串,被替换的字符串
*@paramconstchar*oldstr旧的子串,将被替换的子串
*@paramconstchar*newstr新的子串
*@paramintlen将要被替换的前len个字符
*
*@returnchar*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="woiloveiyou";
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;
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!