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

 更新时间:2017年01月28日 09:48:05   投稿:lqh  
这篇文章主要介绍了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 是为了添加串尾的'\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);
}

return dest;
}

int main()
{
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));

return 0;
}

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

相关文章

  • linux负载均衡总结性说明 四层负载和七层负载有什么区别

    linux负载均衡总结性说明 四层负载和七层负载有什么区别

    这篇文章主要为大家详细介绍了linux负载均衡的相关资料,什么是负载均衡?四层负载和七层负载有什么区别?具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • 浅析Docker私有镜像库与阿里云对象存储 OSS

    浅析Docker私有镜像库与阿里云对象存储 OSS

    在本篇文章中我们给大家分享了关于Docker私有镜像库与阿里云对象存储 OSS的相关知识点内容,有需要的朋友们参考下。
    2018-09-09
  • Ubuntu 20.04最佳配置指南(新手必备)

    Ubuntu 20.04最佳配置指南(新手必备)

    这篇文章主要介绍了Ubuntu 20.04最佳配置指南,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • Yum安装中出现错误mirrorlist.txt的解决方法

    Yum安装中出现错误mirrorlist.txt的解决方法

    前几天在使用Yum install命令安装软件的时候一直提示一个mirrorlist.txt错误,通过查找相关的资料现在找到了解决的方法,所以这篇文章就整理出来和大家分享一下,有同样遇到这个问题的朋友们可以参考借鉴下。
    2016-10-10
  • Linux切换用户环境变量消失问题及解决

    Linux切换用户环境变量消失问题及解决

    这篇文章主要介绍了Linux切换用户环境变量消失问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Linux版本选择攻略:一步到位

    Linux版本选择攻略:一步到位

    Linux版本选择困扰你吗?不知道哪个版本最适合你的需求?别担心,我们的《Linux版本选择攻略:一步到位》将为你解答所有疑惑,
    2024-01-01
  • Linux下批量修改服务器用户密码方法步骤

    Linux下批量修改服务器用户密码方法步骤

    本文给大家介绍Linux下批量修改服务器用户密码方法步骤,批量修改服务器用户密码,由于机器数量比较多,因此采用批量修改密码的方式进行处理比较快,具体操作步骤大家通过本文学习吧
    2018-03-03
  • 利用win10自带虚拟机hyper-v安装centos7方法详解

    利用win10自带虚拟机hyper-v安装centos7方法详解

    利用VMware安装CentOS系统相信大家都比较熟悉了,今天为大家介绍一下利用Win10自带的虚拟机hyper-v来安装CentOS,hyper-v与VMware的区别还是挺大的
    2018-10-10
  • 关于g++和gcc的相同点和区别详解

    关于g++和gcc的相同点和区别详解

    下面小编就为大家带来一篇关于g++和gcc的相同点和区别详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • Xshell连接不上虚拟机的解决办法汇总

    Xshell连接不上虚拟机的解决办法汇总

    本文主要介绍了Xshell连接不上虚拟机的解决办法汇总,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08

最新评论