티모

티모

티모티모· 4년

질문C언어 예제 소스 질문

dog.txt라는 텍스트 파일에서 "dog"라는 문자열을 모두 "rabbit"으로 변환하고, rabbit.txt라는 이름으로 저장하는 프로그램을 만드는 프로그램 입니다.     (dog.txt의 내용)  The quick brown fox jumps over the lazy dog.  I like cat and dog. ----------------------------------------------------------------------------------------------     1. #include <stdio.h> 2. #include <string.h> 3.  4. int main() 5.     FILE *fpr, *fpw;     /* 읽기, 쓰기 파일 포인터 */ 6.     char bufr[256], bufw[256];     /* 읽기, 쓰기 버퍼*/ 7.     char str1 [] = "dog";    /* 바꿀 원래 문자*/ 8.     char str2 [] = "rabbit";     /* 바꿔 넣을 문자*/ 9.     char *p, *q; 10. 11.     if(! (fpr=fopen("dog.txt", "r"))) { 12.          printf("파일을 읽어 오지 못했습니다."); 13.          return 1; 14.     } 15.     if(! (fpw=fopen("rabbit.txt", "w"))) { 16.          printf("파일을 읽어 오지 못했습니다."); 17.          return 1; 18.     } 19.     while(1) { 20.          fgets(bufr, 256, fpr); 21.          if(feof(fpr)) 22.               break; 23.          strcpy(bufw, bufr); 24.          p = strstr(bufr, str1); 25.          if(p) { 26.               q = bufw + (p - bufr); 27.               strcpy(q, str2); 28.               strcpy(q+strlen(str2), p+strlen(str1)); 29.          } 30.          fprintf(fpw, "%s", bufw); 31.     } 32.     fclose(fpr); 33.     fclose(fpw); 34.     return 0;   -------------------------------------------------------------------------------------- 일단 제가 아는데까지 적어 봤는데 26행 ~ 28행을 모르겠어요 사실 24행도 긴가 민가 한데  맞는지 봐주셨으면 좋겠습니다. !    20행: 읽어올 문자수 정하고 읽어온 파일을 bufr 에다 집어넣어라 21행~22행: fpr을 끝까지 읽으면 while문을 나와라 23행: bufr을 bufw에다 복사해라 24행: bufr에서 "dog"이라는 문자열을 찾고 그위치의 포인터 반환 하고 p에다 대입해라 그럼 여기서 포인터p는 dog. I like cat and dog.에 포인터 주소를 반환 받은거잖아요?  25행: p가 참이면 if 문을 실행시켜라    26행: p - bufr 배열을 마이너스 하면 어떤식으로 되는지  이 값들을 bufw 하고 더하면 어떻게 되는 알려주시면 감사하겠습니다.         
1.1K
1
0
라이너
라이너·2021-05-23
대략 찾으려는 문자열의 위치만큼 잘라서 붙이는 것 같은데 다소 복잡하게 만들어져있는 것 같습니다. 재사용 가능한 코드는 아닌 것 같아서 개념 정도만 이해하고 넘어가셔도 좋지 않을까 싶습니다.