【问题标题】:C alternative to PHP's explode functionC替代PHP的explode函数
【发布时间】:2014-01-25 13:08:06
【问题描述】:

所以,我正在寻找一个与 PHP 的 explode 函数等效的 C 函数。 对于那些不熟悉的人:Explode 抓取一个字符串并解析由给定字符/转义序列分隔的每个条目。这个函数最好的部分是它的返回值,它是一个包含所有条目的已经伪造的数组。问题是,这在 C 中似乎不存在。最接近的可用函数是 strchr,但它只返回一个指向第一次拆分的指针。

编辑:这是函数,虽然它有不同的行为(比如返回值不同),但这是我想要的。

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);

【问题讨论】:

  • 那你有研究过这个吗?

标签: php c explode strchr


【解决方案1】:

使用strtok()。从它的手册页:

strtok() 函数将字符串解析为标记序列。在 第一次调用 strtok() 应指定要解析的字符串 在海峡在应解析相同字符串的每个后续调用中,str 应该为 NULL。

每次调用 strtok() 都会返回一个指向以 null 结尾的字符串的指针 包含下一个令牌。此字符串不包括分隔符 字节。如果找不到更多标记,则 strtok() 返回 NULL。

换句话说,遍历您的字符串并继续调用strtok(),直到它返回NULL,以获取所有单词(将在为strtok()的第一次调用指定的分隔符上拆分)返回为char*.

【讨论】:

  • 谢谢,我在设置函数时有点困难,但我的一个朋友解决了它:) 我会在 OP 上发布解决方案
猜你喜欢
  • 2011-11-27
  • 2014-06-19
  • 1970-01-01
  • 2011-11-25
  • 2014-03-15
  • 1970-01-01
  • 2013-10-05
  • 2012-10-09
  • 1970-01-01
相关资源
最近更新 更多