문의한 코드는 삭제합니다.
계속 틀려서 해설지대로 작성해봤는데.. 안되네요 뭐가 잘못된건가요?
if (ptr != NULL && strcmp(ptr, "the") == 0) {
count++;
이 부분에서 ==0 < 이건 왜있는거죠
(도장_ 관리자님이 수정함 - 원문 제출일: 2019년 6월 12일, 수요일, 오전 12:31)
일단 틀린 점은...
#define CRT_SECURE_NO_WARNINGS
->
#define _CRT_SECURE_NO_WARNINGS
#define 지시문은 #include보다 앞에 와야 합니다. 선언 순서를 수정하지 않으면 Visual Studio에서는 컴파일이 되지 않습니다. strtok 함수를 에러로 처리합니다. strtok 함수는 C 언어 표준 함수이므로 다른 플랫폼, 다른 컴파일러 구현체에서는 문제없이 사용할 수 있습니다.
문의한 코드에 중단점을 설정하고 F5 키로 디버깅을 시작합니다. 심사문제의 테스트 케이스를 입력합니다.
19번 줄에서 strtok 함수를 실행했기 때문에 이미 ptr에 값 "the"가 들어간 것을 아래에 창에서 확인할 수 있습니다.
UNIT 6의 디버깅 강의를 참고하셔서 디버거를 익히면 프로그램이 동작하는 과정을 확인하면서 문제점을 찾을 수 있습니다.
UNIT 45.1의 예제를 보면 strtok를 한 번 호출하고, while 루프 안에서 strtok를 반복해서 호출하는 것을 알 수 있습니다. 이 동작 과정은 그림 45-1부터 45-4까지 설명되어 있습니다. 조금 복잡한 과정을 거칩니다.
심사문제에서는 문자열을 나누는 것이 목적이 아니라 예시 텍스트에 "the" 문자열이 몇 개나 있는지 확인하는 문제이므로 count 변수를 이용해 정확하게 개수를 세는 게 중요합니다.
포럼 상단에 유닛 번호 45.8로 검색하면 이전 질문과 답변을 찾아볼 수 있습니다.
"== 0"이 필요한 이유. Unit 41.2를 보면 strcmp 함수는 두 문자열이 같을 때 0을 반환합니다. 예제에서는 ret 변수에 strcmp 함수의 결과를 저장했지만, 심사문제 해설에서는 불필요한 변수를 쓰지 않고 직접 비교를 한 것으로 보입니다.
문제에서는 "the"의 개수를 찾아야 합니다. 테스트 케이스의 정답은 6이고, 문의한 코드는 5를 제출합니다. 항상 1개를 누락해서 카운팅하고 있습니다.