/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* ft_split.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: hulamy +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/11/25 14:00:13 by hulamy #+# #+# */ /* Updated: 2019/12/03 19:07:08 by hulamy ### ########.fr */ /* */ /* ************************************************************************** */ /* ** return an array of string with each word found in str, with c as separator */ #include #include #include size_t ft_strlen(const char *str) { size_t i; i = 0; while (str[i]) i++; return (i); } char *ft_substr(char const *s, unsigned int start, size_t len) { char *str; size_t i; if (!s) return (NULL); if (ft_strlen(s) < start) return (""); if (!(str = (char *)malloc(sizeof(char) * (len + 1)))) return (NULL); i = 0; while (i < len && s[start]) str[i++] = s[start++]; str[i] = '\0'; return (str); } char **ft_split(char const *s, char c); char **ft_strsplit(char const *s, char c); //int main(int ac, char **av) int main(void) { char **str; int i; char *s; char c; // if (ac == 3) // { i = 0; // s = av[1]; // c = av[2][0]; s = "ccucuucccuuuccuuuucuuuuuccc"; c = 'c'; // if ((str = ft_split(s, c))) // { str = ft_split(s, c); while (str[i]) printf("str[%i] : '%s'\n", i, str[i++]); // } // } return (0); } //TEST static int ft_cnt_parts(const char *s, char c) { int cnt; int in_substring; in_substring = 0; cnt = 0; while (*s != '\0') { if (in_substring == 1 && *s == c) in_substring = 0; if (in_substring == 0 && *s != c) { in_substring = 1; cnt++; } s++; } return (cnt); } static int ft_wlen(const char *s, char c) { int len; len = 0; while (*s != c && *s != '\0') { len++; s++; } return (len); } char **ft_strsplit(char const *s, char c) { char **t; int nb_word; int index; index = 0; nb_word = ft_cnt_parts((const char *)s, c); t = (char **)malloc(sizeof(*t) * (ft_cnt_parts((const char *)s, c) + 1)); if (t == NULL) return (NULL); while (nb_word--) { while (*s == c && *s != '\0') s++; t[index] = ft_substr((const char *)s, 0, ft_wlen((const char *)s, c)); if (t[index] == NULL) return (NULL); s = s + ft_wlen(s, c); index++; } t[index] = NULL; return (t); } //TESTFIN //#include "libft.h" static int count(char const *s, char c) { int i; int words; i = -1; words = 0; while (s[++i]) if (s[i] != c && ++words) while (s[i + 1] && s[i + 1] != c) i++; return (words); } char **ft_split(char const *s, char c) { char **array; int w; int len; w = 0; if (!s || !c || !(array = malloc(sizeof(char *) * (count(s, c) + 1)))) return (NULL); while (*s && !(len = 0)) { if (*s != c) { while (s[len] && s[len] != c) len++; if (!(array[w++] = ft_substr(s, 0, len))) { while (array) free(array++); return (NULL); } } s += len ? len : 1; } array[w] = NULL; return (array); }