gpt4 book ai didi

c - 替换文件中的字符串 - C

转载 作者:太空宇宙 更新时间:2023-11-04 04:57:00 26 4
gpt4 key购买 nike

我正在尝试制作一个程序来替换文件中的字符串。

我得到了下面的程序,它替换了文件中所有出现的一个字符串,但现在我需要扩展它来替换多个字符串。

简单的方法是多次运行程序,每次都使用不同的字符串作为输入,但我正在寻找更有效的方法。

我的输入可以是:

  1. 要替换的字符串集(每个字符串出现一次)。
  2. 按出现顺序替换的字符串列表(字符串可以多次出现在列表中)但不知道它们的偏移量。

感谢您的帮助。

#include <stdio.h>
#include <string.h>
#define LINE_LEN 128

int main(){
char fileOrig[32] = "orig.txt";
char fileRepl[32] = "new.txt";
char text2find[80];
char text2repl[80];
printf("enter text to replace in the file:");
scanf ("%s",text2find);
sprintf(text2repl,"%s%s%s","<b><font color=\"#FF0000\">",text2find,"</font></b>");
char buffer[LINE_LEN+2];
char *buff_ptr, *find_ptr;
FILE *fp1, *fp2;
int buff_int;
size_t find_len = strlen(text2find);

fp1 = fopen(fileOrig,"r");
fp2 = fopen(fileRepl,"w");
buff_int=(int)buffer;
while(fgets(buffer,LINE_LEN+2,fp1)){
buff_ptr = buffer;
while ((find_ptr = strstr(buff_ptr,text2find))){
while(buff_ptr < find_ptr)
fputc((int)*buff_ptr++,fp2);
fputs(text2repl,fp2);
buff_ptr += find_len;
}
fputs(buff_ptr,fp2);
}
fclose(fp2);
fclose(fp1);
return 0;
}

最佳答案

有时候事情会变得复杂。假设您有要替换为 {ab,ba} 的字符串,它们将分别替换为 {xy,yx}。假设您有包含“aba”的输入文件。现在输出变得依赖于顺序。

如果一个字符串的替换导致形成另一个属于要替换字符串列表的字符串,则会发生类似的混淆。

IMO,你应该定义在这种情况下你想做什么,然后使用类似于你已经做过的方法。

顺便说一句,您可以使用基于有限自动机的方法或使用一些现有的最先进算法(如 KMP)来更好地匹配字符串。或 Boyer-Moore .这将使您可以一次搜索多个字符串。

关于c - 替换文件中的字符串 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5754536/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com