C++实现txt文件中的查找与替换功能

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++实现txt文件中的查找与替换功能相关的知识,希望对你有一定的参考价值。

设计一个程序,实现txt文件中的查找与替换功能,要求如下:
在原始文件1.txt中输入一段字符串,运行程序,在输出文件2.txt中实现用空格替换回车的功能。
(这应该是程序的一部分,求大神帮忙补全,如果完整,请帮忙找出错误)

FILE *fp1,*fp2; \\声明文件指针变量名
char del;
int i;
printf("\n1.txt为原始文件.");
printf("2.txt为替换文件.\n");
printf("\n按 ENTER 键继续!\n");
getchar(); \\键盘读入字符
if((fp1=fopen("1.txt","r+"))==NULL) \\打开原始文件1.txt,将其赋给了文件指针fp1,并判断文件指针fp1是否为NULL
printf(" 1.txt 打开失败!\n");
exit(0); \\终止程序

if((fp2=fopen("2.txt","w+"))==NULL) \\打开原始文件2.txt,将其赋给了文件指 针fp2,并判断文件指针fp2是否为NULL
printf(" 2.txt 打开失败!\n");
exit(0); \\终止程序

while((del=fgetc(fp1))!=EOF) \\如果文件fp1读入结束,结束循环
if(del=='\n') \\回车
i=fputc(' ',fp2); \\空格
if(i==-1) printf("写入2.txt失败!\n");

else
i=fputc(del,fp2); \\空格替换回车
if(i==-1) printf("写入2.txt失败!\n");

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

void file_replace(FILE *fp_in,FILE *fp_out,char *src,char *dst)

 char c=fgetc(fp_in);

 char tmp[100];

 int count=0;

 while(c!=EOF)

 

  int pPos=0;

  if(c!=src[pPos]) 

 

   fputc(c,fp_out);

   c=fgetc(fp_in);

   continue;//如果当前字符不相等,继续下一个字符

 

  memset(tmp,0,100);

  while(c==src[pPos]) 

 

   tmp[pPos]=c;

   c=fgetc(fp_in);

   pPos++;//相等的部分跳过

 

  if(src[pPos]=='\\0') 

 

   count++;

   printf("源串已找到!替换%d处\\n",count);

   fputs(dst,fp_out);

   continue;

 

  else

 

   fputs(tmp,fp_out);

   continue;//如果当前字符不相等,继续下一个字符

 

 

 return;

int main()

 char path[100],old_path[100];

 printf("请输入文件路径:\\n");

 gets(path);

 strcpy(old_path,path);

 FILE *fp_in;

 FILE *fp_out;

 fp_in=fopen(path,"rt");

 fp_out=fopen(strcat(path,".bak"),"wt");

 if(!fp_in||!fp_out) 

 

  printf("File open error!");

 

 

 char src[100],dst[100];

 printf("请输入要替换的源串:\\n");

 gets(src);

 printf("请输入要替换的目的串:\\n");

 gets(dst);

 file_replace(fp_in,fp_out,src,dst);

 fclose(fp_in);

 fclose(fp_out);

 char cmd[200]="copy ";

 strcat(cmd,path);

 strcat(cmd," ");

 strcat(cmd,old_path);

 system(cmd);

 memset(cmd,0,200);

 strcat(cmd,"del ");

 strcat(cmd,path);

 system(cmd);


参考技术A

1、打开文件,遍历文件内容然后一个一个匹配查找并替换,最后再重新写入文件当中。
2、例程:

#include <stdio.h>
int main()

FILE *fp;
char filename[100];
printf("请输入文件名:\\n");
gets(filename);
fp=fopen(filename,"r");
char c,x,flag=0;
printf("请输入要查找的字符:\\n");
scanf("%c",&x);
while(fscanf(fp,"%c",&c)!=EOF)

if(c==x)

flag=1;
break;


if(flag==1)
printf("文件中含有字符%c\\n",x);
else
printf("文件中没有字符%c\\n",x);
return 0;

参考技术B  #include <stdio.h>
 #include <stdlib.h>
 int main()
 
  FILE *fp1,*fp2; //声明文件指针变量名
  char del;
  int i;
  printf("\n1.txt为原始文件.");
  printf("2.txt为替换文件.\n");
  printf("\n按 ENTER 键继续!\n");
  getchar(); //键盘读入字符
  if((fp1=fopen("1.txt","r+"))==NULL) //打开原始文件1.txt,将其赋给了文件指针fp1,并判断文件指针fp1是否为NULL
  
  printf(" 1.txt 打开失败!\n");
  exit(0); //终止程序
  
  if((fp2=fopen("2.txt","w+"))==NULL) //打开原始文件2.txt,将其赋给了文件指 针fp2,并判断文件指针fp2是否为NULL
  
  printf(" 2.txt 打开失败!\n");
  exit(0); //终止程序
  
  while((del=fgetc(fp1))!=EOF) //如果文件fp1读入结束,结束循环
  
  if(del=='\n') //回车
  
  i=fputc(' ',fp2); //空格
  if(i==-1) printf("写入2.txt失败!\n");
  
  else
  
  i=fputc(del,fp2); //空格替换回车
  if(i==-1) printf("写入2.txt失败!\n");
  
  
  return 0;
 追问

大神,还是运行不了,再给看看吧。你也运行下吧
....
...
c(35) : error C2018: unknown character '0xa1'
C:\Program Files (x86)\Microsoft Visual Studio\MyProjects\W002M\W002M.c(35) : error C2018: unknown character '0xa1'
执行 cl.exe 时出错.

W002M.exe - 1 error(s), 0 warning(s)

追答

#include
#include
int main()

FILE *fp1,*fp2; //声明文件指针变量名
char del;
int i;
printf("\n1.txt为原始文件.");
printf("2.txt为替换文件.\n");
printf("\n按 ENTER 键继续!\n");
getchar(); //键盘读入字符
if((fp1=fopen("1.txt","r+"))==NULL) //打开原始文件1.txt,将其赋给了文件指针fp1,并判断文件指针fp1是否为NULL

printf(" 1.txt 打开失败!\n");
exit(0); //终止程序

if((fp2=fopen("2.txt","w+"))==NULL) //打开原始文件2.txt,将其赋给了文件指 针fp2,并判断文件指针fp2是否为NULL

printf(" 2.txt 打开失败!\n");
exit(0); //终止程序

while((del=fgetc(fp1))!=EOF) //如果文件fp1读入结束,结束循环

if(del=='\n') //回车

i=fputc(' ',fp2); //空格
if(i==-1) printf("写入2.txt失败!\n");

else

i=fputc(del,fp2); //空格替换回车
if(i==-1) printf("写入2.txt失败!\n");


return 0;


代码行末尾有空格,现在应该可以了

参考技术C 先产生一个临时文件,然后通过fgets按行读取原始文件并用sscanf查找特定字串,找到之后直接替换,然后用fputs写入 临时文件,当原文件遍历完时,删除原文件,然后将临时文件命名和原始文件相同即可,或者直接用fscanf即可 参考技术D 很简单,使用正则表达式即可

以上是关于C++实现txt文件中的查找与替换功能的主要内容,如果未能解决你的问题,请参考以下文章

在C++中搜索和替换txt文件中的字符串

C++编程,查找字符串子串并替换。

在c++中怎么实现TXT文件查找和读取

C++ 流类库与输入输出 实验七

C++实现邮件群发的方法

ROS系统 C++或Python实现话题消息的定义与使用