鱼C论坛

 找回密码
 立即注册
查看: 893|回复: 0

[技术交流] C语言字符串查找并替换

[复制链接]
发表于 2020-7-29 17:21:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Cool_Breeze 于 2020-7-29 17:22 编辑

# BUG 每次都是在原地址中查找
# 所以替换字符串不能包含被替换字符串(替=’abc‘, 被=‘bc’)
# 导致无限循环
# 方法:
# 先查找,折叠找到的字符串
# 在折叠处插入字符串
#if 0
        By Cool_Breeze
        Dev-C++ 5.11
        .c
        #endif
#include <stdio.h>
#include <string.h>

void insert_str(char* str,char* flag,size_t sl,size_t fn);
void fold(char* str,size_t rl,char* flag,size_t sl,size_t fl);

//字符串大小 
#define Max 1024

int main(int argc,char **argv)
{
        static char src[Max];
        static char sub[Max];
        static char res[Max];
        
        if (argc != 4)
        {
                printf("%d",argc);
                return 0;
        }
        strcpy(src, argv[1]);
        strcpy(sub, argv[2]);
        strcpy(res, argv[3]);
        
        register size_t srclen=strlen(src);
        register size_t sublen=strlen(sub);
        register size_t reslen=strlen(res);
        
        if (!srclen || !sublen || !reslen)
        {
                printf("%s", src);
                return 0;
        }
        char *p = src;
        while (*p)
        {
                if ((p=strstr(p,sub)) == NULL) break;
                else fold(p,srclen,res,sublen,reslen);
        }

        printf("%s",src);

    return 0;
}

/*
        在字符串开始插入指定字符串
        str  原字符串的起点 
        flag 指定字符串
        sl   原字符串长度
        fl   指定字符串长度 
*/ 
void insert_str(char* str,char* flag,size_t sl,size_t fl)
{
        memmove(str+fl,str,sl+1);//+1存放结束符'\0' 
        memmove(str,flag,fl);
}
/* 
        被替换字符串长度大于替换字符字符串长度 
        explanation:
        str=abcd,flag=abc
        
        str  原字符串的起点
        flag 替换的字符串 
        sl   被替换字符长度
        fl   替换字符串长度 
*/ 
void fold(char* str,size_t rl,char* flag,size_t sl,size_t fl)
{
        memmove(str,str+sl,rl-sl+1);
        insert_str(str,flag,rl,fl);
}
bat:
@echo off
set "s=三四ABCDE三四FG一二三四"
字符串查找及替换.exe "%s%" "三四" "Fishc"
pause >nul

FishcABCDEFishcFG一二Fishc
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 10:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表