打开一篇英文文章,在该文章中找出所有给定的单词,然后对所有给定的单词替换为另外一个单词,再存盘
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char indata[20000]={0},outdata[20000]={0};
char find[100] = {0},replace[100] = {0};
int datalen = 0,nfindpos=0,nreplacepos=0,findlen = 0,replacelen = 0;
FILE *out = NULL;
FILE *in = fopen("D:\\in.dat","r");
if(in==NULL)
return 0;
out = fopen("D:\\out.dat","w");
if(out==NULL)
return 0;
datalen = fread(indata,1,2000,in);
fclose(in);
scanf("%s",find);
scanf("%s",replace);
findlen = strlen(find);
replacelen = strlen(replace);
while(nfindpos < datalen - findlen)
{
if(memcmp(indata+nfindpos,find,findlen) == 0)
{
memcpy(outdata+nreplacepos,replace,replacelen);
nreplacepos += replacelen;
nfindpos += findlen;
}
else
{
outdata[nreplacepos++] = indata[nfindpos++];
}
}
if(nfindpos < datalen)
memcpy(outdata+nreplacepos,indata+nfindpos,datalen-nfindpos);
fwrite(outdata,1,nreplacepos,out);
fclose(out);
return 0;
}
运行结果及代码如下:
(用临时文件暂存的数据,最后用临时文件替换源文件,为了显示效果,截图的时候没有用临时文件替换源文件)
#include <stdio.h>
#include <string.h>
int main()
{
FILE* fp,*fp2; //文件指针
char buf[100]={0}; //缓存每行文本数据
char old[100],rep[100]; //需要替换的单词 及 需要替换成的内容
int i;
int len=0,sz = 0,shift=0;
printf("请输入需要被替换的单词:");
scanf("%s",old);
printf("请输入需要替换成的单词:");
scanf("%s",rep);
len = strlen(old); //得到原来单词的长度
//判断文件是否打开成功
if (!(fp= fopen("a.txt","r")))
{
printf("文件打开失败\n");
return 0;
}
fp2 = fopen("a_tmp.txt","w"); //临时文件
shift = len;
while(!feof(fp))
{
if(fread(buf+len-shift,1,shift,fp) != shift)
break;
buf[len] = 0;
if(strcmp(buf,old)==0)
{
fwrite(rep,1,strlen(rep),fp2);
memset(buf,0,len);
shift = len;
}else
{
fwrite(buf,1,1,fp2);
for(i=0;i<len-1;i++)
buf[i] = buf[i+1];
buf[len-1] = 0;
shift = 1;
}
}
fwrite(buf,1,strlen(buf),fp2);
fclose(fp);
fclose(fp2);
remove("a.txt");
rename("a_tmp.txt","a.txt");
return 0;
}