在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;
}
分享到:
相关推荐
下面是一个简单的字符串替换函数的实现思路: 1. 定义函数原型:函数应接受两个参数,一个是原始字符串,另一个是要被替换的子串和它的替换字符串。 2. 遍历原始字符串:我们需要逐个检查字符串中的每个字符,看...
在JavaScript中,`String.prototype.replace()` 是一个非常重要的字符串方法,用于在字符串中查找匹配的模式(可以是正则表达式或子字符串)并替换它们。这个方法的使用技巧广泛,能够实现各种复杂的字符串处理需求...
[mysql]replace的用法(替换某字段部分内容) [mysql]replace的用法 1.replace into replace into table (id,name) values(‘1′,’aa’),(‘2′,’bb’) 此语句的作用是向表table中插入两条记录。如果主键id为...
本文将深入探讨如何在Linux环境中使用C语言实现一个字符串替换函数。首先,我们需要理解C语言中的字符串基础知识,然后我们将讨论如何创建这个实用的字符串替换功能,并通过makefile文件进行编译。 在C语言中,字符...
1.常见关系数据数据库中的替换函数 在SQL Server数据库中,我们用Replace函数来实现字符的替换。 语法 REPLACE ( ''string_replace1'' , ''string_replace2'' , ''string_replace3'' ) 参数 ”string_replac
python replace函数替换无效问题 str = hello,china! str.replace(hell,well) print(str) hello,China! 进程已结束,推出代码0 写代码时发现这样替换之后并没有替换成功。 原因: 在Python中字符串是是不可变...
此函数提供了一些与 `translate` 函数相似的功能,但 `translate` 提供的是单字符一对一的替换,而 `replace` 允许用一个字符串替换另一个字符串,以及删除字符字符串。 #### 二、`translate` 函数 `translate` ...
replace函数的基本语法是replace(对象,搜索,替换),其中对象是要进行搜索和替换的字段,搜索是要被替换成字符串的子字符串,替换是替换成的新字符串。例如,如果你想要把某个字段中的空格换成下划线,可以使用...
2. **替换操作**:可以使用`replace`函数来替换子串。`replace`需要三个参数:要替换的起始位置,要替换的字符数,以及新的字符串。例如: ```cpp size_t pos = str.find("World"); if (pos != std::string::npos) ...
在这个问题中,我们被要求编写一个名为`replace`的函数,该函数接收一个字符串作为参数,然后在其中查找字符't'(小写)和'T'(大写),并将它们替换为'e'(小写)和'E'(大写),同时返回替换的字符个数。...
MySQL中的`REPLACE()`函数是一个非常实用的字符串处理函数,它允许我们在数据库中的字段值中查找并替换特定的字符子串。这个函数在处理大量数据时尤其有用,能有效地自动化那些繁琐的文本替换任务,避免了手动操作...
语法 REPLACE ( ‘string_expression1’ , ‘string_expression2’ , ‘string_expression3’ ) 参数说明 ‘string_expression1’ 待搜索的字符串表达式。string_expression1 可以是字符数据或二进制数据...
MySQL中的`REPLACE`函数是一个非常实用的字符串处理函数,它允许你在数据库操作中便捷地进行文本替换。在描述中提到的场景,如研究CMS(内容管理系统)时的数据转换,`REPLACE`函数就显得尤为关键,因为它可以方便地...
### PHP正则替换函数preg_replace和preg_replace_callback使用总结 #### 一、概述 在进行PHP编程时,尤其是在处理模板引擎或需要对字符串进行高级替换的场景中,`preg_replace()` 和 `preg_replace_callback()` 是...
在C++编程语言中,`std::string` 类型提供了一个非常实用的成员函数 `replace()`,该函数允许程序员替换字符串中的部分字符或子串。本文将深入探讨`replace()`函数的各种使用方法,帮助开发者更好地理解和运用这一...
定义和用法 replace() 方法用于在字符串中用一些字符替换另一些字符,...规定了替换文本或生成替换文本的函数。 返回值 一个新的字符串,是用 replacement 替换了 regexp 的第一次匹配或所有匹配之后得到的。 说明
在这种情况下,`str_replace()` 不能直接实现,但可以使用正则表达式的 `preg_replace()` 函数配合计数器来实现。例如,`preg_replace('/user_order_list/', 'user/order_list', $str, 1)` 只会替换第一个匹配项。 ...
本文实例讲述了JavaScript使用replace函数替换字符串的方法。分享给大家供大家参考。具体如下: JavaScript通过replace函数替换字符串,下面的代码将Visit Microsoft中的MicroSoft替换成jb51.net <!DOCTYPE ...
1、定义js原生的替换函数。js里没有replaceAll的函数,需要我们自定义 代码如下: String.prototype.replaceAll = function(s1,s2){ return this.replace(new RegExp(s1,”gm”),s2); } 2、使用js的replace进行处理 ...