#include "libft.h" #include static size_t _s_count_words (char const *s, char c) { size_t count; count = 0; while (*s) { while (*s == c) s++; if (*s) { count++; while (*s && *s != c) s++; } } return (count); } /** Free the first @p n elements of @p arr, then @p arr itself. */ static void _s_free_all (char **arr, size_t n) { size_t i; i = 0; while (i < n) free (arr[i++]); free (arr); } char ** ft_split (char const *s, char c) { size_t count; char **arr; size_t i; count = _s_count_words (s, c); arr = malloc ((count + 1) * sizeof (char *)); if (!arr) return (NULL); i = 0; while (*s) { while (*s == c) s++; if (*s) { const char *start = s; while (*s && *s != c) s++; arr[i] = ft_substr (start, 0, s - start); if (!arr[i]) { _s_free_all (arr, i); return (NULL); } i++; } } arr[i] = NULL; return (arr); }