당신은 전체 라인을 읽을 fgets()
를 사용하고, 그래서처럼 구문 분석해야합니다
char buffer[BUFSIZE] = {}; // BUFSIZE should be large enough for one line
fgets(buffer, BUFSIZE, stdin); // read from standard input, same as scanf
char *ptr = strtok(buffer, " "); // second argument is a string of delimiters
// can be " ,." etc.
while (ptr != NULL) {
printf("Word: '%s'\n", ptr);
ptr = strtok(NULL, " "); // note the NULL
}
을 현재 단어가 마지막 단어 인 경우 검사는 간단하다 :
while (ptr != NULL) {
char word[BUFSIZE] = {};
strcpy(word, ptr); // strtok clobbers the string it is parsing
// So we copy current string somewhere else.
ptr = strtok(NULL, " ");
bool is_last_word = (ptr == NULL);
// do your thing here with word[]
}
줄이 (BUFSIZE-1) 자 이상이어야한다는 사실에 의존하고 있습니다. 그것이 더 많으면 fgets() 호출에서 단어를 깨뜨릴 수 있습니다. –
맞기 때문에 측면에 대한 내 의견. 유일한 다른 방법은이 질문의 범위에 속하지 않는 동적 할당 문자열 버퍼를 사용하는 것입니다. 더욱이, 그렇게한다면 C++을 stringstream과 함께 사용하는 것이 좋습니다. – evgeny