본문 바로가기
프로그램/C언어 1000제

C언어 117제] C언어 콘서트 CHAPTER 12 Programming 9 단어 검색하여 바꾸어 저장하기 p490

by 건티 2022. 2. 3.
728x90

출처 : 반크_세계유산 고인돌

 

참고풀이]

//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;
}

 

참고풀이 결과]

 

읽어올 파일)

change.txt
0.00MB

 

대한민국의 아름다운 영토, 독도

 

반응형

댓글