2014-01-25 68 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