2013-08-01 1 views
0

';'을 사용하여 문자열을 토큰으로 분할하려고합니다. 하지만 일부 토큰이 비어 있거나 null 인 문제가 있습니다. 예를 들면 다음과 같습니다. 123; 123132 ;;; 232; 232323 ;;; 1; 그래서 나는 인접 문자 구분 기호를 병합하기 때문에 strtok을 사용할 수 없습니다. 나는 당신이이 솔루션을 게시하는 것을 볼 수 :어떻게 문자열을 '&'로 토큰으로 분할 할 수 있습니까?

include <string.h> 

char *data = "this&&that&other"; 
char *next; 
char *curr = data; 
while ((next = strchr(curr, '&')) != NULL) { 
    /* process curr to next-1 */ 
    curr = next + 1; 
} 
/* process the remaining string (the last token) */ 

을하지만 내가 할 때 다음-1 firts 값을 얻을 수 있기 때문에 내가 값만 모든 값 전체의 firts 단어를 얻을 수 이해하지는. 나를 도와 줄 수 있니? 이걸 어떻게 나눌 생각이 있니? 저는 C 언어로 프로그래밍하고 있습니다. strsep 함수가 존재하는 다른 포스트에서 볼 수 있듯이, 필자가 필요로하는 것처럼 보이지만, C ansi 라이브러리에서는이 함수가 포함되어 있지 않습니다. 내 영어에 대한 감사합니다 죄송합니다 :)

답변

0

나는 당신이 원하는 원하는이 생각 : -

#include <stddef.h> 
#include <string.h> 
#include <stdio.h> 

char* mystrsep(char** input, const char* delim) 
{ 
    char* result = *input; 
    char* p; 

    p = (result != NULL) ? strpbrk(result, delim) : NULL; 

    if (p == NULL) 
    *input = NULL; 
    else 
    { 
    *p = '\0'; 
    *input = p + 1; 
    } 

    return result; 
} 

int main() 
{ 
    char str[] = "123;123132;;;232;232323;;;;1;"; 
    const char delimiters[] = ";"; 
    char* ptr; 
    char* token; 

    ptr = str; 
    token = mystrsep(&ptr, delimiters); 
    while(token) 
    { 
     printf("%s\n",token); 
     token = mystrsep(&ptr, delimiters); 
    } 
    return 0; 
} 
+0

OK 덕분에 많은 그것을 작동합니다. –

0
#include <stdio.h> 
#include <string.h> 

char *strtok_r_noskip(char *str, const char *delims, char **store){ 
    char *p, *wk; 
    if(str != NULL){ 
     *store = str; 
    } 
    if(*store == NULL) return NULL; 
    //*store += strspn(*store, delims);//skip delimiter 
    if(**store == '\0') return NULL; 
    p=strpbrk(wk=*store, delims); 
    if(p != NULL){ 
     *p='\0'; 
     *store = p + 1; 
    } else { 
     *store = NULL; 
    } 
    return wk; 
} 


int main(void){ 
    char data1[] = "this&&that&other"; 
    char *store, *token = strtok_r_noskip(data1, "&", &store); 
    for(; token ; token = strtok_r_noskip(NULL, "&", &store)) { 
     printf("\"%s\"\n", token); 
    } 
/* output 
"this" 
"" 
"that" 
"other" 
*/ 
    char data2[] = "123;123132;;;232;232323;;;;1;"; 
    token = strtok_r_noskip(data2, ";", &store); 
    for(; token ; token = strtok_r_noskip(NULL, ";", &store)) { 
     printf("\"%s\"\n", token); 
    } 
/* output 
"123" 
"123132" 
"" 
"" 
"232" 
"232323" 
"" 
"" 
"" 
"1" 
*/ 

    return 0; 
} 
+0

여러분의 도움에 감사드립니다. 그것은 작동합니다. –

관련 문제