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

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 是为了添加串尾的''结束符  tmp=(char*)malloc(strlen(dest)+(strlen(newstr)-strlen(oldstr))+1);    //把src内的前needle-dest个内存空间的数据,拷贝到arr  strncpy(tmp, dest, needle-dest);    //标识串结束  tmp[needle-dest]='';    //连接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);  }    return dest;  }    int main()  {  char *str="wo i love iyou";  char *old="i";  char *new="ILOVEYOUYA";    char *dest;  //分配内存空间: 大小 == src的长度 + newstr和oldstr长度差(可能是正负或0)+1  printf("%sn",strreplace(dest, str, old, new,1));  printf("%sn",strreplace(dest, str, old, new,5));  printf("%sn",strreplace(dest, str, old, new,40));    return 0;  }

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

参与评论