| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
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
 
  复制代码 
 |   
 
 
 
 |