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

设计一个程序,实现txt文件中的查找与替换功能,要求如下:在原始文件1.txt中输入一段字符串,运行程序,在输出文件2.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");
}
展开
 我来答
吴所不ai
2015-09-03 · TA获得超过3822个赞
知道小有建树答主
回答量:601
采纳率:50%
帮助的人:278万
展开全部

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

}


tattackor
推荐于2016-11-11 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:877万
展开全部

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;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
好吃的人Bp
推荐于2017-12-16 · TA获得超过224个赞
知道小有建树答主
回答量:95
采纳率:0%
帮助的人:131万
展开全部
 #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;
}

代码行末尾有空格,现在应该可以了
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
liangjian_ic
2015-08-14 · TA获得超过237个赞
知道答主
回答量:172
采纳率:0%
帮助的人:34.1万
展开全部
先产生一个临时文件,然后通过fgets按行读取原始文件并用sscanf查找特定字串,找到之后直接替换,然后用fputs写入 临时文件,当原文件遍历完时,删除原文件,然后将临时文件命名和原始文件相同即可,或者直接用fscanf即可
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小志8554
2015-08-26 · TA获得超过1058个赞
知道小有建树答主
回答量:1198
采纳率:25%
帮助的人:306万
展开全部
很简单,使用正则表达式即可
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式