服务器之家:专注于服务器技术及软件下载分享
分类导航

Linux|Centos|Ubuntu|系统进程|Fedora|注册表|Bios|Solaris|Windows7|Windows10|Windows11|

服务器之家 - 服务器系统 - Linux - Linux C字符串替换函数实例详解

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

2021-12-24 16:08Linux教程网 Linux

这篇文章主要介绍了Linux C字符串替换函数实例详解的相关资料,需要的朋友可以参考下

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

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

实例代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#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;
}

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

延伸 · 阅读

精彩推荐
  • LinuxLinux系统怎么搭建Samba共享服务器?

    Linux系统怎么搭建Samba共享服务器?

    Linux系统怎么搭建Samba共享服务器?Samba是Linux发行版常用的文件共享服务器,可用于实现与Windows系统之间的文件共享交换,让即时不了解Linux的用户也能够...

    Linux教程网5252019-10-12
  • LinuxLinux及FreeBSD系统下如何查看CPU信息

    Linux及FreeBSD系统下如何查看CPU信息

    一、Linux 查看cpu信息: [junjie2@ljj ~]$ cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 13 model name : Intel(R) Pentium(R) M processor 1.60GHz stepping : 8 cpu ...

    Linux之家6772019-10-13
  • LinuxLinux使用密码管理工具pass管理密码的方法

    Linux使用密码管理工具pass管理密码的方法

    使用的密码多了反而记不过来,这样就容易混淆,下面小编就给大家介绍一款实用的密码管理工具pass,一起来学习下pass的使用吧 ...

    Linux技术网4682019-10-16
  • LinuxLinux系统怎么复制文件夹下的全部文件到另外文件夹?

    Linux系统怎么复制文件夹下的全部文件到另外文件夹?

    Linux系统怎么复制文件夹下的全部文件到另外文件夹?在Linux系统中复制或拷贝文件我们可以用cp或者copy命令,但要对一个文件夹中的全部文件复制到另外一...

    Linux教程网8382019-10-07
  • Linux在Linux上安装和使用Rsync进行同步的教程

    在Linux上安装和使用Rsync进行同步的教程

    这篇文章主要介绍了在Linux上安装和使用rsync进行同步的教程,使得Rsync可以同步工作环境与生产环境,从而简化配置不知,需要的朋友可以参考下 ...

    开源中文社区5322019-09-27
  • Linuxlinux系统配置vsftpd服务后启动失败该怎么办?

    linux系统配置vsftpd服务后启动失败该怎么办?

    linux下成功安装vsftpd后启动失败解决方法,我刚刚遇到的是ftp端口21被占用导致vsftpd服务无法正常启动 1、检查vsftpdf服务是否安装成功:rpm -qa|gerp vsft 2、启...

    网络6502019-06-27
  • LinuxLinux系统中nmap网络扫描工具的命令用法详解

    Linux系统中nmap网络扫描工具的命令用法详解

    这篇文章主要介绍了Linux系统中nmap网络扫描工具的命令用法详解,nmap扫描器通过发送特定的网络数据包,记录目标主机的应答消息,从而收集关于目标主机的各...

    luckyhe3112019-06-18
  • Linux面向通用嵌入式Linux系统

    面向通用嵌入式Linux系统

    就像早期的Linux一样,嵌入式Linux世界也需要拥抱自动化,并利用容器化来实现基础设施的无摩擦和不可见性。到现在为止,有许多不同的发行版,如RedHa...

    粤嵌教育4892021-12-21