那段程序没小段是什么意思能和我说下么?就是实现txt文件中的查找与替换...
发布网友
发布时间:2024-10-19 07:10
我来回答
共1个回答
热心网友
时间:2024-11-05 22:03
#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)//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++;
}
//字符串以‘\0’做结束符
//当前位置为‘\0’说明已找到该字符串
if(src[pPos]=='\0')
{
//计数器+1
count++;
printf("源串已找到!替换%d处\n",count);
//目标字符串写入目标文件
fputs(dst,fp_out);
continue;
}
else
{
fputs(tmp,fp_out);
continue;//如果当前字符不相等,继续下一个字符
}
}
return;
}
void 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!");
return;
}
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);
//main函数就不用我解释了吧,其实字符串替换的原理是重写,而不是真正替换文件的内容
}