2014-01-25 67 views
0

所以,我正在尋找一個C函數,相當於PHP的爆炸函數。 對於那些不熟悉的人:Explode抓取一個字符串並分析由給定char /轉義序列分隔的每個條目。關於這個函數的最好的部分是它的返回值,它是一個已經僞造了所有條目的數組。問題是,這似乎並不存在於C中,可用的最接近的函數是strchr,但它只返回指向分裂的第一次出現的指針。C的替代PHP的爆炸函數

編輯:這裏是函數,雖然它有不同的行爲(如返回值不同),這是我想要的。

int explode(char* str, char* delim, char ***r) { 
    char **res = (char**) malloc(sizeof(char*) * strlen(str)); 
    char *p; 
    int i = 0; 
    while (p = strtok(str, delim)) { 
     res[i] = malloc(strlen(p) + 1); 
     strcpy(res[i], p); 
     ++i; 
     str = NULL; 
    } 
    res = realloc(res, sizeof(char*) * i); 
    *r = res; 
    return i; 
} 

有可能這樣調用它:

char str[] = "test1|test2|test3"; 
char** res; 
int count = explode(str, "|", &res); 
int i; 
for (i = 0; i < count; ++i) { 
    printf("%s\n", res[i]); 
    free(res[i]); 
} 
free(res); 
+0

你對此做過一些研究嗎? – asprin

回答

1

使用strtok()。從它的手冊頁:

strtok()函數將字符串解析爲一個標記序列。在 第一次調用strtok()字符串時,應該在str中指定 。在每個應解析相同字符串的後續調用中,str 應爲NULL。

每次調用strtok()都會返回一個指向包含下一個標記的以NULL結尾的字符串 的指針。該字符串不包含分隔的 字節。如果沒有找到更多的標記,strtok()返回NULL。

換句話說,遍歷您的字符串,並保持通話strtok()直到它爲了得到所有(這將在指定的strtok()第一個呼叫分隔符拆分)返回char*的話返回NULL

+1

謝謝,我有一些dificulty設置功能,但我的一個朋友解決了它:)我會在OP上發佈解決方案 – zecoxao