C++实现txt文件中的查找与替换功能 15
在原始文件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、打开文件,遍历文件内容然后一个一个匹配查找并替换,最后再重新写入文件当中。
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;
}
#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;
}
代码行末尾有空格,现在应该可以了