출처 : 반크_세계유산 고인돌
참고풀이]
//Dev-C++ 5.11로 작업함.
#include <stdio.h>
#include <stdlib.h> //exit()
#include <string.h> //strlen(), strcmp(), strstr()
int main(void)
{
FILE *fp1, *fp2;
char StrLine[255];
char Word1[255],Word2[255];
char Word3[255],Word4[255];
int c,i,j,k;
int chk; //파일의 끝여부 파악 변수
// 원본 파일을 읽기 모드로 연다.
if ((fp1 = fopen("change.txt", "r")) == NULL)
{
fprintf(stderr, "원본 파일 change.txt을 열 수 없습니다.\n");
exit(1);
}
// 임시 파일을 쓰기 모드로 연다.
if ((fp2 = fopen("imsi.txt", "w")) == NULL)
{
fprintf(stderr, "임시 파일 imsi.txt을 열 수 없습니다.\n");
exit(1);
}
//검색할 단어를 입력한다.
printf("검색할 단어를 입력하시오 : ");scanf("%s",Word1);
//교체할 단어를 입력한다.
printf("바꿀 단어를 입력하시오 : ");scanf("%s",Word2);
//원본 파일을 읽어 특정 단어를 찾아 다른 단어로 교체하고 임시 파일에 저장한다.
while((chk=fgets(StrLine,sizeof(StrLine),fp1)) != NULL)
{
//읽어온 라인별 문자열
printf("\n바꾸기전 문자열 : %s",StrLine);
//Word1 문자열을 검색한다.
if(strstr(StrLine,Word1) != NULL )
strcpy(Word3,strstr(StrLine,Word1));
else strcpy(Word3,"");
//Word1을 포함된 문자열이면 Word1문자열을 찾아 Word2로 바꾸어준다.
if(strlen(Word3))
{
//Word3문자열들 중 Word1문자열을 찾아 Word2로 바꾸어 준다.
for(i=0;i<strlen(StrLine);i++)
{
//Word1길이만큼 StrLine문자열에서 추출한다.
for(j=0,c=i;c<strlen(Word1)+i;c++)
Word4[j++]=StrLine[c];
Word4[j]='\0';
//추출한 문자열 Word4가 Word1과 같은 문자열인가 체크하여 같으면 Word2로 바꾸어준다.
if(strcmp(Word4,Word1)==0)
for(j=0,c=i;c<strlen(Word1)+i;c++)
StrLine[c]=Word2[j++];
}
printf("▶ 바 뀐 문자열 : %s",StrLine);
}
//임시파일에 저장한다.
fputs(StrLine,fp2);
}
fclose(fp1);
fclose(fp2);
//원본파일을 삭제한다.
remove("change.txt");
//임시파일을 원본파일로 이름을 바꾸어 준다.
rename("imsi.txt", "change.txt");
//원본 파일은 소스파일이 저장된 곳에 있도록 합니다.
return 0;
}
참고풀이 결과]
읽어올 파일)
대한민국의 아름다운 영토, 독도
댓글