标题: C语言字符串查找并替换 [打印本页]
作者: Gin_Q 时间: 2020-7-29 16:09 标题: C语言字符串查找并替换
本帖最后由 Gin_Q 于 2020-7-29 16:26 编辑
# 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%" "三四" "bathome"
- pause >nul
-
- bathomeABCDEbathomeFG一二bathome
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |