2013-08-01 23 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

非常感謝您的幫助。有用 –

相關問題