!記得不要抄!
【問題描述】
編寫程式将一個指定檔案中某一字元串替換為另一個字元串。要求:(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中。
方法一
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
int main()
{
FILE *fp, *pp;
fp = fopen("filein.txt", "r");
pp = fopen("fileout.txt", "w");
char in[20], out[20], ch, str[1050];
scanf("%s%s", &in, &out);
int len_in, len_out, i = 0, len_str, j = 0;
len_in = strlen(in);
len_out = strlen(out);
ch = fgetc(fp);
while (ch != EOF)
{
str[i++] = ch;
ch = fgetc(fp);
}
len_str = i + 1;
for (i = 0; i < len_str; i++)
{
int flag = 0;
if (tolower(str[i]) == tolower(in[0]))
{
for (j = 1; j < len_in; j++)
{
if (tolower(str[i + j]) != tolower(in[j]))
{
flag = 1;
}
}
if (flag == 0)
{
for (int z = 0; z < len_out; z++)
{
fputc(out[z], pp);
}
i = i + len_in - 1; //後移單詞長度
}
else
{
fputc(str[i], pp);
}
}
else
{
fputc(str[i], pp);
}
}
fclose(fp);
fclose(pp);
}
方法二
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char a[105], b[105], c[10005];
int judge(int i, int d)
{
int j, flag = 0;
for (j = 0; j < d; j++)
{
if (tolower(c[i + j]) != tolower(a[j]))
flag = 1;
}
if (flag == 1)
{
return 0;
}
else
return 1;
}
int main()
{
FILE *IN, *OUT;
int l, d, e, i = 0, k;
char flag;
scanf("%s", a);
scanf("%s", b);
d = strlen(a);
e = strlen(b);
IN = fopen("filein.txt", "r");
OUT = fopen("fileout.txt", "w");
flag = fgetc(IN);
while (flag != EOF)
{
c[i++] = flag;
flag = fgetc(IN);
}
l = i + 1;
for (i = 0; i < l; i++)
{
if (judge(i, d) == 1)
{
for (k = 0; k < e; k++)
{
fputc(b[k], OUT);
}
i += d - 1;
}
else
fputc(c[i], OUT);
}
fclose(IN);
fclose(OUT);
}
方法三
#include <stdio.h>
#include <string.h>
char search_case[1025], replace_case[1025];
char buff[1028];
char Tolower(char c)
{
if (c >= 'A' && c <= 'Z')
return 'a' - 'A' + c;
return c;
}
void index(char s[], char t[], FILE *K, char g[])
{
int i, j, k;
for (i = 0; s[i] != '\0'; i++)
{
for (j = i, k = 0; t[k] != '\0' && Tolower(s[j]) == Tolower(t[k]); j++, k++)
;
if (t[k] == '\0')
{
fputs(replace_case, K);
i += strlen(search_case);
}
fputc(s[i], K);
}
}
int main()
{
fgets(search_case, 1025, stdin);
fgets(replace_case, 1025, stdin);
for (int i = 0;; i++)
{
if (search_case[i] == '\r' || search_case[i] == '\n')
{
search_case[i] = '\0';
break;
}
}
for (int i = 0;; i++)
{
if (replace_case[i] == '\r' || replace_case[i] == '\n')
{
replace_case[i] = '\0';
break;
}
}
FILE *input_document = fopen("filein.txt", "r");
FILE *output_document = fopen("fileout.txt", "w");
while (fgets(buff, 1026, input_document) != NULL)
{
index(buff, search_case, output_document, replace_case);
}
fclose(input_document);
fclose(output_document);
return 0;
}