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);

}


温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-11-11

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;
}

第2个回答  推荐于2017-12-16
 #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;
}

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

本回答被网友采纳
第3个回答  2015-08-14
先产生一个临时文件,然后通过fgets按行读取原始文件并用sscanf查找特定字串,找到之后直接替换,然后用fputs写入 临时文件,当原文件遍历完时,删除原文件,然后将临时文件命名和原始文件相同即可,或者直接用fscanf即可
第4个回答  2015-08-26
很简单,使用正则表达式即可
相似回答