【问题描述】
编写程序将一个指定文件中某一字符串替换为另一个字符串。要求:(1)被替换字符串若有多个,均要被替换;(2)指定的被替换字符串,大小写无关。
【输入形式】
给定文件名为filein.txt。从控制台输入两行字符串(不含空格,行末尾都有回车换行符),分别表示被替换的字符串和替换字符串。
【输出形式】
将替换后的结果输出到文件fileout.txt中。
【样例输入】
从控制台输入两行字符串:
in
out
文件filein.txt的内容为:
#include <stdio.h>
void main()
{
FILE * IN;
if((IN=fopen("in.txt","r"))==NULL)
{
printf("Can’t open in.txt!");
return;
}
fclose(IN);
}
【样例输出】
文件fileout.txt的内容应为:
#outclude <stdio.h>
void maout()
{
FILE * out;
if((out=fopen("out.txt","r"))==NULL)
{
prouttf("Can’t open out.txt!");
return;
}
fclose(out);
}
【样例说明】
输入的被替换字符串为in,替换字符串为out,即将文件filein.txt中的所有in字符串(包括iN、In、IN字符串)全部替换为out字符串,并输出保存到文件fileout.txt中。
【评分标准】
该题要求得到替换后的文件内容,共有5个测试点。上传C语言文件名为replace.c。
【思路】
1.创建两个字符数组存储被替换与替换字符串
2.使用文件的基本操作打开文件,并使用fgets函数逐行读取处理
3.通过逐个对比查找判断是否需要替换,替换后略过原部分直接进行下方的遍历
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAX 1024
char old[MAX],news[MAX];
char line[MAX];
int main()
{
FILE *in,*out;
in=fopen("filein.txt","r");
out=fopen("fileout.txt","w");
if (in == NULL || out == NULL) {
printf("Error opening files.\n");
return 1;
}
gets(old);
gets(news);
int x1=strlen(old),x2=strlen(news);
int equal=1;
while(fgets(line,MAX-1,in)!=NULL)//逐行读取到line中进行处理
{
int x3=strlen(line);
int i=0;
while(i<x3)
{
int j=0;
while(j<x1)//对比
{
if(tolower(old[j])!=tolower(line[i+j]))//忽略大小写
{
equal=0;
break;
}
j++;
}
if(equal==1)
{
fputs(news, out);//替换后输出到文件
i += x1; //i+x1后略过替换部分遍历到下一位
}
else//不符合替换条件
{
fputc(line[i], out);
i++;
}
equal = 1; //重置
}
}
fclose(in);
fclose(out);
return 0;
}