aboutsummaryrefslogtreecommitdiffstats
path: root/libft/src/ft_split.c
diff options
context:
space:
mode:
authorRudy Bousset <rbousset@z2r4p3.le-101.fr>2020-01-17 19:34:53 +0100
committerRudy Bousset <rbousset@z2r4p3.le-101.fr>2020-01-17 19:34:53 +0100
commita287db1124beda38507739f892c085bd3654ebd7 (patch)
treec439a25efe0309de08087d439a597f84583b257f /libft/src/ft_split.c
parentRemoved libft (diff)
download42-cub3d-a287db1124beda38507739f892c085bd3654ebd7.tar.gz
42-cub3d-a287db1124beda38507739f892c085bd3654ebd7.tar.bz2
42-cub3d-a287db1124beda38507739f892c085bd3654ebd7.tar.xz
42-cub3d-a287db1124beda38507739f892c085bd3654ebd7.tar.zst
42-cub3d-a287db1124beda38507739f892c085bd3654ebd7.zip
Added libft
Diffstat (limited to '')
-rw-r--r--libft/src/ft_split.c109
1 files changed, 109 insertions, 0 deletions
diff --git a/libft/src/ft_split.c b/libft/src/ft_split.c
new file mode 100644
index 0000000..f0cac95
--- /dev/null
+++ b/libft/src/ft_split.c
@@ -0,0 +1,109 @@
+/* ************************************************************************** */
+/* LE - / */
+/* / */
+/* ft_split.c .:: .:/ . .:: */
+/* +:+:+ +: +: +:+:+ */
+/* By: rbousset <marvin@le-101.fr> +:+ +: +: +:+ */
+/* #+# #+ #+ #+# */
+/* Created: 2019/10/12 19:24:20 by rbousset #+# ## ## #+# */
+/* Updated: 2019/10/13 08:37:16 by rbousset ### #+. /#+ ###.fr */
+/* / */
+/* / */
+/* ************************************************************************** */
+
+#include <libft.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <inttypes.h>
+
+static uint8_t
+ ft_check(int c, char sep)
+{
+ if (c == sep)
+ return (1);
+ return (0);
+}
+
+static size_t
+ ft_strlen_plus(const char *str, char c)
+{
+ size_t i;
+ size_t count;
+ uint8_t ibool;
+
+ i = 0;
+ count = 0;
+ ibool = 1;
+ while (str[i])
+ {
+ while (ft_check(str[i], c) && str[i])
+ i++;
+ while (!ft_check(str[i], c) && str[i])
+ {
+ if (ibool == 1)
+ count++;
+ ibool = 0;
+ i++;
+ }
+ ibool = 1;
+ }
+ return (count);
+}
+
+static size_t
+ ft_strlen_again(const char *str, char c)
+{
+ size_t i;
+
+ i = 0;
+ while (!ft_check(str[i], c) && str[i])
+ i++;
+ return (i);
+}
+
+static char
+ *ft_strdup_plus(const char *src, char c)
+{
+ size_t i;
+ size_t slen;
+ char *nstr;
+
+ i = 0;
+ slen = ft_strlen_again(src, c) + 1;
+ if (!(nstr = (char*)ft_calloc(slen, sizeof(char))))
+ return (NULL);
+ while (!ft_check(src[i], c) && src[i])
+ {
+ nstr[i] = src[i];
+ i++;
+ }
+ nstr[i] = '\0';
+ return (nstr);
+}
+
+char
+ **ft_split(const char *s, char c)
+{
+ size_t i;
+ size_t j;
+ char **best_split;
+
+ i = 0;
+ j = 0;
+ if (!(best_split = (char **)ft_calloc(ft_strlen_plus(s, c) + 1,
+ sizeof(char *))))
+ return (NULL);
+ while (s[i])
+ {
+ while (ft_check(s[i], c) && s[i])
+ i++;
+ while (!ft_check(s[i], c) && s[i])
+ {
+ best_split[j] = ft_strdup_plus(&s[i], c);
+ i += ft_strlen_again(&s[i], c);
+ j++;
+ }
+ }
+ best_split[j] = 0;
+ return (best_split);
+}