`

C实现Replace替换函数

 
阅读更多

在php中有str_replace()可以将字符串中的某些内容替换成另外的内容,但c并没有提供这样的功能。

因为c要管理内存,当替换成的字符串长度大于要替换的字符串长度时,原来存放数据的空间是否足够以供替换后的数据存放是个问题。为此:C可以实现返回一个动态分配内存的空间,存放替换后的数据。

另外,如果不想使用新空间存放,那么必须保证存放数据的内存足够大,比如如果肯定数据替换后不会超过10KB,那么可以先分配10KB。

具体代码如下:

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/**
 * 统计key在data中出现的次数
 * @param data 待查找的字符串
 * @param key  要查找的字符串
 * @return key在data中出现的次数
 */
int _count_string(char *data, char *key)
{
	int count = 0;
	int klen = strlen(key);
	char *pos_start = data, *pos_end;
	while (NULL != (pos_end = strstr(pos_start, key))) {
		pos_start = pos_end + klen;
		count++;
	}
	return count;
}

/**
 * 将data中的rep字符串替换成to字符串,以动态分配内存方式返回新字符串
 * 这个函数不需要保证data能保证容量。
 * @param data 待替换某些字符串的数据
 * @param rep  待替换的字符串
 * @param to   替换成的字符串
 * @param free_data 不为0时要释放data的内存
 * @return 返回新分配内存的替换完成的字符串,注意释放。
 */
char *malloc_replace(char *data, char *rep, char *to, int free_data)
{
    int rep_len = strlen(rep);
    int to_len  = strlen(to);
    int counts  = _count_string(data, rep);
    printf("counts = %d\n", counts);
    int m = strlen(data) + counts * (to_len - rep_len);
    char *new_buf = (char *) malloc(m + 1);
    if (NULL == new_buf) {
        free(data);
        return NULL;
    }
    memset(new_buf, 0, m + 1);
    char *pos_start = data, *pos_end, *pbuf = new_buf;
    int copy_len;
    while (NULL != (pos_end = strstr(pos_start, rep))) {
        copy_len = pos_end - pos_start;
        strncpy(pbuf, pos_start, copy_len);
        pbuf += copy_len;
        strcpy(pbuf, to);
        pbuf += to_len;
        pos_start  = pos_end + rep_len;
    }
    strcpy(pbuf, pos_start);
	if (free_data)
    	free(data);
    return new_buf;
}

/**
 * 将data中的rep字符串替换成to字符串
 * 注意保证data空间足够替换完成后的字符串长度
 * @param data 待替换某些字符串的数据
 * @param rep  待替换的字符串
 * @param to   替换成的字符串
 * @return 无
 */
void normal_replace(char *data, char *rep, char *to)
{
	char *new_buf = malloc_replace(data, rep, to, 0);
	if (NULL != new_buf) {
		strcpy(data, new_buf);
		free(new_buf);
	}
}
int main(int argc, char **argv)
{
	char buf[4096];
	char *rep = "{subject}";
	char *to  = "留香的美好";
	strcpy(buf, "Subject: {subject}, body:Subject2:{subject}; end");
	printf("%s\n", buf);
	normal_replace(buf, rep, to);
	printf("%s\n", buf);

	return 0;
}
   

 

分享到:
评论

相关推荐

    C replace 函数

    下面是一个简单的字符串替换函数的实现思路: 1. 定义函数原型:函数应接受两个参数,一个是原始字符串,另一个是要被替换的子串和它的替换字符串。 2. 遍历原始字符串:我们需要逐个检查字符串中的每个字符,看...

    js中字符替换函数String.replace()使用技巧

    在JavaScript中,`String.prototype.replace()` 是一个非常重要的字符串方法,用于在字符串中查找匹配的模式(可以是正则表达式或子字符串)并替换它们。这个方法的使用技巧广泛,能够实现各种复杂的字符串处理需求...

    mysql 替换字段部分内容及mysql 替换函数replace()

    [mysql]replace的用法(替换某字段部分内容) [mysql]replace的用法 1.replace into  replace into table (id,name) values(‘1′,’aa’),(‘2′,’bb’)  此语句的作用是向表table中插入两条记录。如果主键id为...

    MySQL中使用replace、regexp进行正则表达式替换的用法分析

    replace函数的基本语法是replace(对象,搜索,替换),其中对象是要进行搜索和替换的字段,搜索是要被替换成字符串的子字符串,替换是替换成的新字符串。例如,如果你想要把某个字段中的空格换成下划线,可以使用...

    字符串替换函数基于C语言实现可运行于Linux

    本文将深入探讨如何在Linux环境中使用C语言实现一个字符串替换函数。首先,我们需要理解C语言中的字符串基础知识,然后我们将讨论如何创建这个实用的字符串替换功能,并通过makefile文件进行编译。 在C语言中,字符...

    MongoDB中数据的替换方法实现类Replace()函数功能详解

    1.常见关系数据数据库中的替换函数 在SQL Server数据库中,我们用Replace函数来实现字符的替换。 语法 REPLACE ( ''string_replace1'' , ''string_replace2'' , ''string_replace3'' ) 参数 ”string_replac

    解决python replace函数替换无效问题

    python replace函数替换无效问题 str = hello,china! str.replace(hell,well) print(str) hello,China! 进程已结束,推出代码0 写代码时发现这样替换之后并没有替换成功。 原因: 在Python中字符串是是不可变...

    ORACLE replace和translate函数详解

    此函数提供了一些与 `translate` 函数相似的功能,但 `translate` 提供的是单字符一对一的替换,而 `replace` 允许用一个字符串替换另一个字符串,以及删除字符字符串。 #### 二、`translate` 函数 `translate` ...

    c代码-7、字符替换。要求用函数replace将用户输入的字符串中的字符t(T)都替换为e(E),并返回替换字符的个数。

    在这个问题中,我们被要求编写一个名为`replace`的函数,该函数接收一个字符串作为参数,然后在其中查找字符't'(小写)和'T'(大写),并将它们替换为'e'(小写)和'E'(大写),同时返回替换的字符个数。...

    VC中实现查找、替换字符串

    2. **替换操作**:可以使用`replace`函数来替换子串。`replace`需要三个参数:要替换的起始位置,要替换的字符数,以及新的字符串。例如: ```cpp size_t pos = str.find("World"); if (pos != std::string::npos) ...

    MySQL替换函数replace()替换指定字段中的所有字符子串为其他字符串

    MySQL中的`REPLACE()`函数是一个非常实用的字符串处理函数,它允许我们在数据库中的字段值中查找并替换特定的字符子串。这个函数在处理大量数据时尤其有用,能有效地自动化那些繁琐的文本替换任务,避免了手动操作...

    sqlserver replace函数 批量替换数据库中指定字段内指定字符串参考方法

    语法 REPLACE ( ‘string_e­xpression1’ , ‘string_e­xpression2’ , ‘string_e­xpression3’ ) 参数说明 ‘string_e­xpression1’ 待搜索的字符串表达式。string_e­xpression1 可以是字符数据或二进制数据...

    MySQL replace函数替换字符串语句的用法

    MySQL中的`REPLACE`函数是一个非常实用的字符串处理函数,它允许你在数据库操作中便捷地进行文本替换。在描述中提到的场景,如研究CMS(内容管理系统)时的数据转换,`REPLACE`函数就显得尤为关键,因为它可以方便地...

    PHP正则替换函数preg_replace和preg_replace_callback使用总结

    ### PHP正则替换函数preg_replace和preg_replace_callback使用总结 #### 一、概述 在进行PHP编程时,尤其是在处理模板引擎或需要对字符串进行高级替换的场景中,`preg_replace()` 和 `preg_replace_callback()` 是...

    C++中replace()函数使用方法汇总

    在C++编程语言中,`std::string` 类型提供了一个非常实用的成员函数 `replace()`,该函数允许程序员替换字符串中的部分字符或子串。本文将深入探讨`replace()`函数的各种使用方法,帮助开发者更好地理解和运用这一...

    JS利用正则配合replace替换指定字符

    定义和用法 replace() 方法用于在字符串中用一些字符替换另一些字符,...规定了替换文本或生成替换文本的函数。 返回值 一个新的字符串,是用 replacement 替换了 regexp 的第一次匹配或所有匹配之后得到的。 说明

    php str_replace替换指定次数的方法详解

    在这种情况下,`str_replace()` 不能直接实现,但可以使用正则表达式的 `preg_replace()` 函数配合计数器来实现。例如,`preg_replace('/user_order_list/', 'user/order_list', $str, 1)` 只会替换第一个匹配项。 ...

    JavaScript使用replace函数替换字符串的方法

    本文实例讲述了JavaScript使用replace函数替换字符串的方法。分享给大家供大家参考。具体如下: JavaScript通过replace函数替换字符串,下面的代码将Visit Microsoft中的MicroSoft替换成jb51.net &lt;!DOCTYPE ...

    Js 回车换行处理的办法及replace方法应用

    1、定义js原生的替换函数。js里没有replaceAll的函数,需要我们自定义 代码如下: String.prototype.replaceAll = function(s1,s2){ return this.replace(new RegExp(s1,”gm”),s2); } 2、使用js的replace进行处理 ...

Global site tag (gtag.js) - Google Analytics