공백 하나만이 입력으로 주어지면 틀립니다.
1152번 - 단어의 개수
무언가 달라진 것이 있을 때는 달라진 코드를 첨부하는 것이 매우 중요합니다.
정답을 받으신 코드를 보면 조건문이 while(tmp != NULL) 로 되어 있는데, 맨 처음 루프를 들어가기 전까지 strtok가 몇 번 실행되는지를 생각해 보면 차이점을 알 수 있습니다.
질문의 코드는 처음으로 while 문의 조건을 검사하지까지 두 번의 strtok가 실행되므로, 맨 첫 단어를 건너뛰고 두 번째 단어부터 세게 됩니다. 그래서 count + 1을 출력해야 됐던 것이고, 단어가 0개인 경우가 반례가 됐던 것입니다.
반면 정답을 받으신 코드에서는 처음 strtok가 한 번 실행된 결과가 먼저 tmp에 들어가고, 그 결과를 가지고 루프를 들어간 다음부터 바로 count를 세기 때문에 그대로 count를 출력하면 된 것입니다. 단어가 없을 경우 tmp가 처음부터 NULL이기 때문에 루프를 한 번도 들어가지 않아서 역시 정답을 출력합니다.
결국 포인터 변수를 사용했느냐가 정답 여부를 결정한 것이 아니라, strtok의 호출 위치가 포인트였다는 것을 알 수 있습니다.
댓글을 작성하려면 로그인해야 합니다.
develop 3년 전 1
여기서 포인터 문자열 하나 선언해서 거기다가 따로 받아주니 고쳐지더라구요.
왜 포인터 따로 선언하지 않고 직접 하면 틀리는지 잘 모르겠습니다.
그리고, 문장 앞 뒤에 띄어쓰기를 입력해도 단어의 갯수는 정상적으로 나오던데,
strtok로 띄어쓰기를 구분해준다면 문장 앞 뒤에 있는 띄어쓰기도 갯수로 인식해야 정상 아닌가요?
왜 안세는지 잘 모르겠습니다