본문 바로가기
C 언어

strtok 함수 구현

by treeCoder 2022. 3. 11.

strtok 함수 구현 방법이다.

/* https://coding-factory.tistory.com/592 */

// #define NULL ((void*)0)
#include <stdio.h>

char* strtok1(char* str, const char* delimiters ){
   static char* pCurrent;
   char* pDelimit;

   if ( str != NULL ) pCurrent = str;
   else str = pCurrent;

   if(*pCurrent == NULL) return NULL;

   while (*pCurrent)    { /* 문자열 점검 */
       pDelimit = (char*)delimiters ;
       
       while (*pDelimit){
         if(*pCurrent == *pDelimit){
               *pCurrent = NULL;
               ++pCurrent;
               return str;
            }
            ++pDelimit;
       }
       ++pCurrent;
   }
    
    return str; /* 더이상 자를 수 없다면 NULL반환 */
}

/* https://hand-over.tistory.com/29 */
char *strcpy1(char *dest, const char *src) {

        char *tmp = dest;

        /*
         * src 가 null byte 일때까지 dest에 한자씩 복사한 후 리턴합니다.
         */
        while ((*dest++ = *src++) != '\0')
                /* nothing */;
        return tmp;
}

char *nth(char *str, char *ans, int cnt) {
   int i;
   char *p;
   char str2[1024];
   
   strcpy1(str2, str);

   for( i = 1, p= strtok1(str2, "-"); p!=NULL;  p=strtok1(NULL, "-"), i++) {
     if( i == cnt ) { strcpy1(ans, p); return ans; }
        
   }
   
  return NULL;
}

int main( ) {
    char str1[]="110-223-356-489-514-659";
    char *p;
    char ans[128];

    for( int i = 1; i < 7; i++) {
        p = nth(str1, ans, i); 
        puts(p);
    }
    return 0;
}



실행결과는 아래와 같다.

댓글