// 设计函数 char (*tok(char *s, const char *delim))[100] ,实现s按给定的分隔符分隔出所有的内容,并返回分隔之后的二维数组指针。 // 示例: // char s[] = "Hello,World,How,Are,You"; // const char delim[] = ","; // char(*tokens)[100] = tok(s, delim); #include #include #include char (*tok(char *s, const char *delim))[100] { // 计算分隔符的长度 size_t delim_len = strlen(delim); // 计算字符串中分隔符的个数 int count = 1; char *p = s; while (*p != '\0') { if (strncmp(p, delim, delim_len) == 0) { count++; p += delim_len; // 跳过分隔符 } else { p++; } } // 分配存储结果的二维数组 char(*tokens)[100] = malloc(count * sizeof(*tokens)); // 分隔字符串 int i = 0; p = s; char *token_start = p; while (*p != '\0') { if (strncmp(p, delim, delim_len) == 0) { strncpy(tokens[i], token_start, p - token_start); tokens[i][p - token_start] = '\0'; i++; p += delim_len; // 跳过分隔符 token_start = p; } else { p++; } } // 处理最后一个分隔符后的部分 strncpy(tokens[i], token_start, p - token_start); tokens[i][p - token_start] = '\0'; return tokens; } int main() { char s[] = "Hello,World,How,Are,You"; const char delim[] = ","; char(*tokens)[100] = tok(s, delim); // 打印分隔后的结果 for (int i = 0; tokens[i][0] != '\0'; i++) { printf("%s\n", tokens[i]); } // 释放内存 free(tokens); return 0; }