관리 메뉴

드럼치는 프로그래머

[C] strtok구현 본문

★─Programing/☆─C | C++

[C] strtok구현

드럼치는한동이 2007. 11. 7. 00:26

출처:francis__kim

char *my_strtok(char *str, char *delim)
{
 static char *org = NULL; // 토큰분리시작점.

                          // 토큰계속분리요청시(NULL로 호출) 이전 정보를

                          // 보관하고 있어야 하므로 static으로 선언.
 static char *tracer = NULL; // 분리문자를 찾아가기위한 변수

                             // 연속처리에 사용하기 위하여 static으로 선언
 char *pdelim; // 분리문자 비교를 위한 변수


 // 새로운 문자열이 들어 오면 static 변수에 등록

 if (str != NULL) tracer = str;

 // 분리문자가 없으면 분리할 방법이 없으므로 NULL로 반환
 if (delim == NULL || *delim == NULL) return NULL;

 // 분리문자를 찾기 위한 추적변수를 검사하여 더이상 처리할 문자열이 없으면 NULL로 반환
 if (tracer == NULL || *tracer == '\0') return NULL;


 // 토큰분리시점에서부터 분리문자가 있다면 스킵해야 겠죠?

 // 여긴 앞에 붙어 있는 분리문자를 스킵하는 부분입니다.

 while (*tracer) {

  // 현재 문자를 분리문자열에 있는 문자들과 비교
  for (pdelim = delim; *pdelim; pdelim++) {
   if (*tracer == *pdelim) break;
  }

  // 위에 있는 반복문에서 분리문자와 일치하면 해당 분리문자를 pdelim 변수가

  // 가리키고 있을거고... 일치하는문자가 없다면 문자열 끝을 나타내는 '\0'에 가있을테니... pdelim이 가리키는 문자값을 보면 분리문자인지 아닌지 알수가 있겠죠...
  if (*pdelim == '\0') break;
  tracer++;
 }

 // 여기서부터 본격적으로 분리문자까지 추적을 하게 됩니다.

 // 반환해야 할 포인터 값을 추적 시작지점으로 설정하고

 // 추적문자에 값이 있을때 까지(문자열 끝은 '\0'이니까) 순차적으로 검사
 for (org = tracer; *tracer; tracer++) {

  // 위에 설명한 바와 같이 분리문자와 일치하는지 검사합니다.
  for (pdelim = delim; *pdelim; pdelim++) {

   // 분리문자와 일치하면 반복문 탈출~~
   if (*tracer == *pdelim) break;
  }

  // 분리문자와 일치한다면...
  if (*pdelim) {
   *tracer++ = '\0'; // 해당분리문자를 '\0'으로 설정해서 하나의 토큰으로 분리

                     // (문자열은 '\0'을 만나면 끝이죠???)

                     // 그리고 연속처리를 위해 추적개시점을 다음문자로 옮겨놓습니다... ^^
   break;
  }
 }

 return(org); // 추적개시점을 반환하면 받는쪽에서는 분리문자가 '\0'로 바뀌어 있으니 거기까지가 문자열로 인식되겠죠... ^^
}

'★─Programing > ☆─C | C++' 카테고리의 다른 글

[C] 다항식 덧셈 / C로 구현 (연결 리스트)  (0) 2007.11.27
[C] scanf()함수 예제1  (0) 2007.11.07
[C] 2차원 배열 생성 malloc  (0) 2007.10.30
[C] 포인터, 배열, 구조체  (0) 2007.10.29
[C] strstr 함수  (0) 2007.10.29
Comments