C/C++
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