C언어/C언어 예제

[C언어 소스] strtok 함수 사용 예제 (대상 문자열에서 delimeters를 기준으로 분할하는 함수)

언제나휴일 2016. 5. 4. 07:31
반응형

[C언어 소스] strtok 함수 사용 예제 (대상 문자열에서 delimeters를 기준으로 분할하는 함수)


//C언어 표준 라이브러리 함수 사용법 가이드

//char * strtok ( char * str, const char * delimeters); 대상 문자열에서 delimeters를 기준으로 분할하는 함수

//대상 문자열에서 delimeters로 분할한 문자열 목록 출력

 

#pragma warning(disable:4996)

#include <stdio.h>

#include <string.h>

 

char * ehstrtok(char * str, const char * delimeters)

{

    static char *pos = NULL;

    static char buffer[256];

    int len,len2;

    int i,j;

 

    if (str)//입력 인자가 NULL이 아니면

    {

        pos = str;//pos에 설정

    }

 

    len = strlen(pos);//posl 문자열 길이 계산

    len2 = strlen(delimeters);//delimeters 문자열 길이 계산

 

    //delimeters와 다른 문자가 나올 때까지 반복

    for (i = 0; i < len; i++)

    {

        for (j = 0; j < len2; j++)

        {

            if (pos[i] == delimeters[j])//pos[i] delimeters[j]가 같으면

            {               

                break;//반복문 탈출(j<len2)

            }

        }

        if (j == len2)//같은 것이 없으면

        {

            break;//반복문 탈출

        }

    }

   

    pos = pos + i;//pos delimeters와 다른 문자가 처음나온 위치로 설정

   

    for (i = 0; i < len; i++)

    {

        for (j = 0; j < len2; j++)

        {

            if (pos[i] == delimeters[j])//pos[i] delimeters[j]가 같으면

            {

                break;//반복문 탈출(j<len2)

            }

        }

        if (j < len2)//delimeters에 같은 문자가 있으면

        {

            strncpy(buffer, pos, i);//부분 문자열 복사

            buffer[i] = 0;//종료 문자 대입

            pos = pos + i+1;//pos 위치는 다음으로 이동

            return buffer;//복사한 문자열 반환

        }

    }

   

    return NULL;

}

int main (void)

{

    char str[200] ="나는 집에  간다. 그리고, C언어로 프로그램을 작성한다. 화이팅! 언제나 휴일";

    char str2[200] = "다시 한 번 테스트! 이번에는 ehstrtok 함수 사용.";

    char *delimeters = " ,.!";

    char * pos;

 

    printf("원본: %s\n",str);

    //strtok 함수 이용

    printf("== 공백이나 콤마, 느낌표, 마침표를 기준으로 분할 ==\n");

    pos = strtok(str,delimeters);  //처음 호출 시에 대상 문자열 전달

    while (pos != NULL)

    {

        printf ("%s\n",pos);

        pos = strtok (NULL, delimeters);//이 후 NULL 전달

    }   

 

    printf("원본: %s\n",str2);

    //ehstrtok 함수 이용

    printf("== 공백이나 콤마, 느낌표, 마침표를 기준으로 분할 ==\n");

    pos = ehstrtok(str2, delimeters);//처음 호출 시에 대상 문자열 전달

    while (pos != NULL)

    {

        printf("%s\n", pos);

        pos = ehstrtok(NULL, delimeters);//이 후 NULL 전달

    }

    return 0;

}

 

출력

원본:나는 집에 간다. 그리고, C언어로 프로그램을 작성한다. 화이팅! 언제나 휴일

== 공백이나 콤마, 느낌표, 마침표를 기준으로 분할 ==

나는

집에

간다

그리고

C언어로

프로그램을

작성한다

화이팅

언제나

휴일

원본: 다시 한 번 테스트! 이번에는 ehstrtok 함수 사용.

== 공백이나 콤마, 느낌표, 마침표를 기준으로 분할 ==

다시

테스트

이번에는

ehstrtok

함수

사용


언제나 휴일 티스토리 바로가기

언제나 휴일 유튜브 채널 바로가기

반응형