Linux C字符串替换函数实例详解
linux  /  管理员 发布于 6年前   147
Linux C字符串替换函数实例详解
最近学习linux 的基础编程知识,字符串替换函数,在网上找下资料,觉得这篇文章写的不错,记录下来,和大家分享一下:
实例代码:
#include <stdio.h>#include <string.h>#include <stdlib.h> /**** @author: [email protected]* @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个内存空间的数据,拷贝到arrstrncpy(tmp, dest, needle-dest);//标识串结束tmp[needle-dest]='\0';//连接arr和newstr, 即把newstr附在arr尾部, 从而组成新串(或说字符数组)arrstrcat(tmp, newstr);//把src中 从oldstr子串位置后的部分和arr连接在一起,组成新串arrstrcat(tmp, needle+strlen(oldstr));//把用malloc分配的内存,复制给指针retvdest = 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)+1printf("%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;}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..路人 在
php中使用hyperf框架调用讯飞星火大模型实现国内版chatgpt功能示例中评论 教程很详细,如果加个前端chatgpt对话页面就完美了..Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号