살아가는 이야기

strtok 사용법 본문

컴퓨터, 풀어그림

strtok 사용법

우균 2016. 10. 7. 01:11

주어진 문자열을 원하는 단위로 자를 때, 흔히 각 단위를 토큰(token)이라고 부른다. 예를 들어서 문자열 "C language programming"을 공백을 기준으로 자른다고 할 때, 각 단어 "C", "language", "programming"을 흔히 토큰이라고 한다. 엄밀히 말하면 토큰은 단어의 부류를 나타내는 용어이지만 흔히 단어 자체를 토큰이라고 부른다.

C 라이브러리 함수 strtok를 사용하면 주어진 문자열을 분리할 수 있다. 그런데 이 함수의 사용법이 매우 요상해서 참고로 여기에 적어둔다. strtok는 대표적인 과거 민감형(history-sensitive) 함수인데 처음에 strtok를 호출할 때에는 자를 문자열을 첫 번째 인수로 전달해야 하지만 이후 단어를 연속해서 자를 때에는 NULL을 첫 번째 원소로 전달해야 한다. 구체적 예로 "C language programming"의 토큰을 분리하는 예를 보면 다음과 같다.

#include <stdio.h>
#include <string.h>

#define MAX_TOK 50

int main()
{
    char str[] = "C language programming";
    char *token[MAX_TOK];
    int i = -1, j = 0;

    token[++i] = strtok(str, " ");  // extracting the first token
    while (token[i] != NULL) {
        printf("token(%d) = %s\n", i, token[i]);
        token[++i] = strtok(NULL, " ");
    }
    for (j = 0; j < i; j++)
        printf("|%s|%s", token[j], (j == i-1)?"\n":" ");

    return 0;

strtok 함수에서 또 한 가지 주의해야 할 점은 토큰을 분리할 때 원본 문자열이 수정된다는 점이다. 


Comments