/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* ft_split.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: whaffman +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/18 10:44:32 by whaffman #+# #+# */ /* Updated: 2024/06/19 14:46:27 by whaffman ### ########.fr */ /* */ /* ************************************************************************** */ /* ...Halooo dit is een zin, met woorden erin. ^ ^ ^ f->f---->b ^^ ^ ff->b */ #define WORD 1 #define SEP 0 #include #include char **ft_split(char *str, char *charset); char *ptr_skip(int word, char *str, char *sep); int count_words(char *str, char *sep); int is_sep(char c, char *sep); int is_sep(char c, char *sep) { while (*sep) { if (c == *sep) return (1); sep++; } return (0); } int count_words(char *str, char *sep) { int i; int count; i = 0; count = 0; str = ptr_skip(SEP, str, sep); while (str[i]) { if (!is_sep(str[i], sep) \ && (is_sep(str[i + 1], sep) \ || str[i + 1] == '\0')) count++; i++; } return (count); } char *ptr_skip(int word, char *str, char *sep) { while (*str && word ^ is_sep(*str, sep)) str++; return (str); } unsigned int ft_strlcpy(char *dest, char *src, unsigned int n) { unsigned int i; i = 0; while (src[i] && i + 1 < n) { dest[i] = src[i]; i++; } dest[i] = '\0'; return (i); } char **ft_split(char *str, char *charset) { int n_words; char **result; char *end; char *word; int i; str = ptr_skip(SEP, str, charset); n_words = count_words(str, charset); result = (char **) malloc((n_words + 1) * sizeof(char *)); i = 0; result[0] = 0; if (!*str) return (result); while (i < n_words) { end = ptr_skip(WORD, str, charset); word = (char *) malloc((end - str + 1) * sizeof(char)); ft_strlcpy(word, str, (end - str + 1)); word[end - str] = '\0'; result[i] = word; str = ptr_skip(SEP, end, charset); i++; } result[i] = 0; return (result); } /* #ifdef DEBUG int main(void) { char **segments; segments = ft_split("", ""); while (*segments) { printf("%s\n", *segments); segments++; } printf("%p",*segments); } #endif */