2013-08-01 26 views
0

我正在用';'将字符串拆分为标记。但是我有一个问题,例如一些标记是空的/空的; 123; 123132 ;;; 232; 232323 ;;;; 1; 所以我不能使用strtok becasuse合并邻接分隔符。我看到您发布此解决方案:我如何将一个字符串拆分为'&'的标记

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 ansi的程序员。我在另一篇文章中看到存在一个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

非常感谢您的帮助。有用 –

相关问题