본문 바로가기

공부/컴퓨터

strtok 직접 구현

반응형
#include "stdio.h"
#include <string.h>
char * strtokex( char* str , char* deli )
{
        static char* source = NULL;
        static int str_size;
        static int source_count;


        int deli_count = 0;
        char* start_posion = NULL;
        int temp_count = 0;
        char delimeter[10] = { 0, };



       // str 이 null 이 아니면 새로운 문자열이 들어 왔으므로

       // 새 문자열에 대한 것으로 교체 해 준다.

        if ( str != NULL ) {
           source = str;
           str_size = strlen(str);

           source_count = 0;
        }



        // 리턴 되어야할 문자열의 처음 포인터..

        start_posion = source;



        while ( *deli != '\0' )
        {
                delimeter[deli_count] = *deli;  // delimeter[i++] = (char*)deli++;
                deli_count++;
                deli++;
        }



        // 모든 토큰을 구했다.  이제 문자열에서 토큰이 있는지 확인하고
        // 있다면 그 토큰 부분에 \0 을 넣어 주도록하자.

        while ( *source != '\0' )
        {
                for ( temp_count = 0 ; temp_count < deli_count ; temp_count++ )
                {
                        if ( *source == delimeter[temp_count] )
                        {
                              *(source) = (char)0;
                              source++;
                              source_count++;
                              return start_posion;
                        }
                }
               source++;
               source_count++;
        }
  

  // 지금 들어와 있는 문자열의 마지막을 포인터 했다는 뜻임

  // 즉.. 더 이상 문자열을 자를수 없으므로... source_count 만 1 증가 시킴으로써

  // 다음번 호출 될때에는 null 을 리턴하게 만든다.

  if ( source_count == str_size ) {
     source_count++;
     return start_posion;
  } else {
     return NULL;

  }


}
반응형