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下MySQL 5.5/5.6的修改字符集编码为UTF8的方法
- Linux shell脚本中字符串连接的方法
- Linux内核设备驱动之虚拟文件系统笔记整理
- Linux内核设备驱动之系统调用笔记整理
- Linux内核设备驱动之内核的调试技术笔记整理
- Linux内核设备驱动之内核中链表的使用笔记整理
- Linux内核设备驱动之proc文件系统笔记整理
- Linux内核设备驱动之高级字符设备驱动笔记整理
- Linux内核设备驱动之Linux内核模块加载机制笔记整理
- Linux内核设备驱动地址映射笔记整理
- Linux内核设备驱动之Linux内核基础笔记整理
- Linux内核设备驱动之字符设备驱动笔记整理
相关文章
利用win10自带虚拟机hyper-v安装centos7方法详解
利用VMware安装CentOS系统相信大家都比较熟悉了,今天为大家介绍一下利用Win10自带的虚拟机hyper-v来安装CentOS,hyper-v与VMware的区别还是挺大的2018-10-10
最新评论