Linux C字符串替换函数

原创 2012年03月23日 17:11:53

#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;
}

C语言实现字符串替换函数

#include #include #include #include //字符串替换函数 /*************************************************...
  • earbao
  • earbao
  • 2014年03月01日 17:51
  • 22656

实现一个replace函数替换掉指定c串中子字符串

基本思路,先扫描source字符串, 记录下所有
  • nodeathphoenix
  • nodeathphoenix
  • 2014年07月19日 11:42
  • 4597

c语言之strreplace字符串替换

#include #include #include //https://github.com/ssllab/temper1/blob/722991add4a6a239271e1f029ebe...
  • earbao
  • earbao
  • 2016年06月29日 22:51
  • 2739

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

本文转自:http://www.jb51.net/article/104339.htm #include #include #include /** * * @autho...
  • piaopiaopiaopiaopiao
  • piaopiaopiaopiaopiao
  • 2017年12月03日 11:10
  • 30

数据结构——算法之(012)( linux C 所有字符串操作函数实现)

题目:实现linux C下常用的字符串操作函数 题目分析: 一、面试中可能经常遇到这样的问题:比如strcpy、memcpy、strstr 二、参考了linux 内核代码,对linux大神表示感...
  • mr_chenping
  • mr_chenping
  • 2014年05月23日 14:35
  • 1283

Linux C 字符串输出函数 puts()、fputs()、printf() 详解

转自:http://www.cnblogs.com/phpgo/p/5724378.html 一、puts() 函数详解 puts()函数用来向 标准输出设备 (屏幕)写字...
  • caoxiaohong1005
  • caoxiaohong1005
  • 2017年06月17日 11:39
  • 416

linux C 中常用的字符串操作函数

点击(此处)折叠或打开/*字符串长度函数*/  size_t strlen(const char *string); /*不受限制的字符串函数*/   char *strcpy(char *dst,...
  • u014353386
  • u014353386
  • 2016年04月01日 01:37
  • 214

Linux C 函数 内存及字符串操作

Linux C 函数 内存及字符串操作 2008年06月04日 星期三 下午 02:35 bcmp(比较内存内容) 相关函数 bcmp,strcasecmp,strcmp,st...
  • junecau
  • junecau
  • 2011年09月10日 15:57
  • 633

Linux C 字符串输入函数 gets()、fgets()、scanf() 详解

一、gets() 函数详解 gets()函数用来从 标准输入设备(键盘)读取字符串直到 回车结束,但回车符('\n')不属于这个字符串。 调用格式为: gets(str); ...
  • shenhuan1104
  • shenhuan1104
  • 2017年08月09日 22:04
  • 1549

linux c常用字符串处理函数

一、puts 名称: puts 功能: 向显示器输出字符串。 头文件: #include .h> 函数原形: int puts(const char *s); 参数: s 字符串 返回...
  • xxgxgx
  • xxgxgx
  • 2016年03月31日 10:27
  • 264
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux C字符串替换函数
举报原因:
原因补充:

(最多只允许输入30个字)