본문 바로가기

app/C

문자열 처리 , strtok()

데브피아 애청자로써..ㅎㅎ 질문란을 보다가 좋은 예시가 올라와서 올린다.


strtok 함수는 두번째 인자에 해당하는 문자를 만나면 내부적으로 NULL 로 처리하기 
때문에 위와 같은 경우에 문제가 생기죠.. 이것은 strtok 함수의 변종을 사용해야 하는
데 아래에 source를 첨부합니다. (일명 xstrtok) 참고로 이 함수는 표준함수가 아니며,
저도 같은 고민을 하다가 외국 저널에 실린 내용에서 찾은 겁니다. 
 이 함수는 strtok와 사용법이나 동작이 동일합니다. 단, 콤마 사이에 내용이 없으면 
NULL을 리턴하는 점만이 다름니다. 
 이 함수를 제가 하고 있던 프로그램에 적용했더니 잘 되는 군요.. 그럼..
 char* ClassName::xstrtok(char *line, char *delims)
{
    static char *saveline = '\0';
    char *p;
    int n;

    if(line != '\0') saveline = line;
    if(saveline == '\0' || *saveline == '\0') return('\0');
    n = strcspn(saveline, delims);
    p = saveline; /* save start of parsed token*/
    saveline += n; /* step past the delimiter*/
    /* step past the delimiter and terminate token*/
    if(*saveline != '\0') *saveline++ = '\0';

    return(p); /* return the token*/
}

strtok()의 문제점인 NULL반환을 재선언(오버로딩이라긴엔 함수이름이 틀리니..)하여

문제를 푸는 것을 봐서 올려본다. 담번에 String 제어 할때 써먹야 겠다.



'app > C' 카테고리의 다른 글

ARtool-kit 셋팅!!  (0) 2008.12.17
openCV 셋팅!!  (0) 2008.12.15
gets() 와 scanf()의 차이점 소스  (0) 2007.09.10
싱글 링크드 리스트(학생관리편)  (1) 2007.08.29
자료의 입출력  (0) 2007.08.22