본문 바로가기

C/C++/[C] 함수

[C 함수] strtok 함수를 이용한 문자열 검색.

반응형

C 함수.

strtok 함수를 이용한 문자열 검색하기 !!


strtok 함수는 문자열에서 내가 정해준 구분자를 기준으로 토큰으로 분리할 때 사용합니다.

이렇게 말로 하면 조금 이해가 어렵지만, 예제를 통해 어떤 기능을 하는지 확인해보면

바로 아~! 하고 이해가 갈겁니다.


예제 소스는 아래와 같습니다 ~ !

( 해당 예제는 문자열에서 "내일" 이라는 단어가 몇번째에 들어가 있는지를 알려주는 기능을 합니다. )


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

int main()
{
    char str[100] = "나 스무살 적에 하루를 견디고 불안한 잠자리에 누울때면 내일 뭐하지 내일 뭐하지 걱정을 했지";
    // 기본 문자열.
    char *token;
    // 토큰의 주소를 받을 char 포인터 변수.
    int count = 1;
    // 카운트를 기록할 변수.

    token = strtok(str, " ");
    // strtok 함수에 인자 전달 및 토큰 받아오는 부분.
    /* strtok 함수엔 두개의 인자값을 보내는데.
       첫번째는 검색하고자 하는 문자열의 첫 주소지.
       두번째는 구분자 입니다. 위와 같이 " " 이렇게 할 경우 띄어쓰기를 구분자로, 토큰화 하며
       " .,_" 이런 방법으로 여러개의 구분자를 동시에 사용할 수 도 있습니다. */ 

    while(token != NULL) {
        if(!strcmp(token , "내일"))
        // strtok 함수에서 return 해준 주소지의 값과 내가 찾고자 하는 단어 "내일"이 같은지 확인.
        {
            printf("내일은 %d번째 단어 입니다.\n", count);
        }
        token = strtok(NULL, " ");
        /* strtok 함수에 위와 같이 첫번째 인자값에 NULL 을 보내게 되면,
            기존의 포인터(주소지)에서 그대로 검색을 진행 합니다. */
        count++;
    }
    return 0;
}

결과.

내일은 9번째 단어 입니다.

내일은 11번째 단어 입니다.


예제 소스만 보고 넘어 가시기 보다는,

문자열을 직접 사용자로 부터 입력받고~ 그중에 찾고자 하는 단어도 입력을 통해

찾게하는 기능을 구현하거나,

구분자를 활용해 길게 쓰여진 문단을 한 마디씩 끊어서 저장을 하거나 하는 기능을

구현해보면서 다양하게 사용해보시는걸 추천 합니다 ~ 


혹시 이해가 안가는 부분이 있으시다면 댓글 주세요 ~


반응형