C语言 16行代码实现字符串中指定字符串替换

推荐文章

Qt开发一款免费开源功能完整的串口调试、Tcp、Udp调试工具


目录

1. 功能描述

V0.2

V0.3 

2.函数代码

V0.3代码

V0.2代码


1. 功能描述

V0.2

  1. 任意长度字符串替换
  2. 中文替换

V0.3 

  1. 重新实现,大字符串替换性能嗖嗖

        注意:替换后的存储地要准备足够的空间,防止内存越界

        其他字符串函数CSDN

2.函数代码

应粉丝需求,一个3.9M的文件做 字符串替换,3年前的V0.2崩溃,修复后性能巨差问题显现,之前没测试过大字符串替换,所以重新实现一下。最近不用linux环境了,用qt写的c代码。参数有所变化,这版速度贼快。

V0.3代码

#include <QApplication>
#include <QDebug>

/* 功  能:将 src 字符串中的 before 字符串替换为 after 字符串
 * 参  数:dest:替换后的字符串存储地 src:操作目标 before :需替换的字符串 after :替换为
 * 返回值:返回替换之后的字符串
 * 版  本:V0.3
 * 注  意:dest要提前准备好足够空间
 */
char *strrpc(char *dest,char *src,char *before,char *after){
    size_t src_size = strlen(src);
    size_t before_str_size = strlen(before);
    size_t after_str_size = strlen(after);

    size_t dest_offset = 0;
    for(size_t src_offset = 0;src_offset < src_size; ){
        if(!strncmp(src + src_offset,before,before_str_size)){
            memcpy(dest + dest_offset,after, after_str_size);
            src_offset += before_str_size;
            dest_offset += after_str_size;
        }else{
            memmove(dest + dest_offset,src + src_offset,1);
            dest_offset++;
            src_offset++;
        }
    }

    return dest;
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    char str[] = "Hello,中国!";
    char dest[1024];
    memset(dest,0,1024);
    strrpc(dest,str,"中国","世界");
    qDebug()<<str<<dest; //打印结果

    memset(dest,0,1024);
    strrpc(dest,str,"Hello","你好");
    qDebug()<<str<<dest; //打印结果

    memset(dest,0,1024);
    strrpc(dest,str,"Hello,中国!","你好,世界!");
    qDebug()<<str<<dest; //打印结果

    return a.exec();
}

输出结果 

 

V0.2代码

以下问题代码已弃用 


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


/* 功  能:将str字符串中的oldstr字符串替换为newstr字符串
 * 参  数:str:操作目标 oldstr:被替换者 newstr:替换者
 * 返回值:返回替换之后的字符串
 * 版  本: V0.2
 */
char *strrpc(char *str,char *oldstr,char *newstr){
    char bstr[strlen(str)];//转换缓冲区
    memset(bstr,0,sizeof(bstr));
 
    for(int i = 0;i < strlen(str);i++){
        if(!strncmp(str+i,oldstr,strlen(oldstr))){//查找目标字符串
            strcat(bstr,newstr);
            i += strlen(oldstr) - 1;
        }else{
        	strncat(bstr,str + i,1);//保存一字节进缓冲区
	    }
    }
 
    strcpy(str,bstr);
    return str;
}

int main(void)
{
	char str[] = "Hello,中国!\n"; 
	strrpc(str,"中国","世界");
	printf("%s",str);
	strrpc(str,"Hello","你好");
	printf("%s",str);
	strrpc(str,"你好,世界","Hello,world");
	printf("%s",str);
	return 0;
}

搜这个的人还挺多,大家还需要什么别的函数,欢迎在下方留言^-^。

  • 36
    点赞
  • 145
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 21
    评论
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是唐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值