Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어로 문자열 토큰을 출력하는 프로그램: strtok() 함수 완벽 정리


여러 개의 단어로 이루어진 문장이 담긴 문자열 s가 있다고 가정해 봅시다. 이때 각 단어를 새로운 줄에 하나씩 출력해야 한다면 어떻게 해야 할까요? 이러한 작업은 string.h 헤더 파일에 포함된 strtok() 함수를 사용하면 손쉽게 해결할 수 있습니다. 이 함수는 대상 문자열과 구분자(delimiter)를 인수로 받으며, 여기서는 구분자로 공백 문자 " "를 사용합니다.

예를 들어 입력이 s = "Let us see some string tokenizing fun"과 같다면, 실행 결과는 다음과 같습니다.

Let
us
see
some
string
tokenizing
fun

문제 해결 접근 방식

이 문제는 다음과 같은 단계로 해결할 수 있습니다.

  • strtok(s, " ")를 호출하여 첫 번째 단어를 token 변수에 저장합니다. 이때 구분자는 공백 " "입니다.

  • token이 NULL이 아닌 동안 아래 작업을 반복합니다.

    • token에 저장된 단어를 화면에 출력합니다.

    • strtok(NULL, " ")처럼 첫 번째 인수에 NULL을 전달하여 같은 문자열에서 다음 토큰을 가져옵니다. 이후 호출부터는 구분자로 동일하게 공백 " "를 사용합니다.

참고: strtok() 함수는 원본 문자열을 직접 수정하며, 구분자 위치에 널 종료 문자(\0)를 삽입하는 방식으로 동작합니다. 따라서 원본 문자열을 보존해야 하는 경우에는 복사본을 만들어 사용하는 것이 좋습니다.

예제 코드

아래 구현 예제를 통해 더 자세히 이해해 보겠습니다.

#include <stdio.h>
#include <string.h>
int main(){
    char s[] = "Let us see some string tokenizing fun";
    char* token = strtok(s, " ");
    while (token) {
        printf("%s\n", token);
        token = strtok(NULL, " ");
    }
}

입력

Let us see some string tokenizing fun

출력

Let
us
see
some
string
tokenizing
fun