diff --git a/ft_split_charset.c b/ft_split_charset.c new file mode 100644 index 0000000..193ec82 --- /dev/null +++ b/ft_split_charset.c @@ -0,0 +1,73 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_split_charset.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: erey-bet +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/04/11 14:50:26 by erey-bet #+# #+# */ +/* Updated: 2023/04/11 17:48:13 by erey-bet ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include + +int new_strs(char ***strs, char *to_split, int *i, int *j) +{ + (*i)++; + (*j) = 0; + (*strs)[(*i)] = malloc(sizeof(char) + * (ft_strlen(to_split) + 1)); + if ((*strs)[(*i)]) + return (1); + return (0); +} + +int get_strs(char *to_split, char *charset, char ***strs, int i) +{ + int j; + int x; + int y; + + x = -1; + (*strs)[i] = malloc(sizeof(char) * (ft_strlen(to_split) + 1)); + if (!(*strs)[i]) + return (1); + while (to_split[++x]) + { + y = -1; + while (charset[++y]) + { + if (to_split[x] == charset[y]) + { + y = 0; + x++; + if (ft_strlen((*strs)[i]) > 0) + if (new_strs(strs, to_split, &i, &j)) + return (1); + } + } + (*strs)[i][j++] = to_split[x]; + } + return (0); +} + +char **ft_split_charset(char *to_split, char *charset) +{ + char **strs; + int i; + + strs = malloc(sizeof(char *) * (ft_strlen(to_split) + 1)); + if (!strs) + return (NULL); + i = 0; + if (get_strs(to_split, charset, &strs, i)) + { + i = -1; + while (strs[++i]) + free(strs[i]); + free(strs); + } + return (strs); +}