mirror of
https://github.com/Ladebeze66/cub3D.git
synced 2025-12-15 13:46:57 +01:00
93 lines
1.1 KiB
C
93 lines
1.1 KiB
C
#include "cub3d.h"
|
|
|
|
static size_t words_count(char *s, char c)
|
|
{
|
|
size_t i;
|
|
size_t j;
|
|
|
|
i = 0;
|
|
j = 0;
|
|
while (*s)
|
|
{
|
|
if (*s != c)
|
|
i++;
|
|
else if (*s == c && i != 0)
|
|
{
|
|
j++;
|
|
i = 0;
|
|
}
|
|
s++;
|
|
}
|
|
if (i != 0)
|
|
j++;
|
|
return (j);
|
|
}
|
|
|
|
static char *word(char *s, char c)
|
|
{
|
|
char *buf;
|
|
|
|
while (*s == c)
|
|
s++;
|
|
buf = s;
|
|
while (*buf && *buf != c)
|
|
buf++;
|
|
*buf = '\0';
|
|
return (ft_strdup(s));
|
|
}
|
|
|
|
static char **free_arr(char **arr, char *s)
|
|
{
|
|
size_t i;
|
|
|
|
i = 0;
|
|
while (arr[i])
|
|
{
|
|
free(arr[i]);
|
|
i++;
|
|
}
|
|
free(arr);
|
|
free(s);
|
|
return (NULL);
|
|
}
|
|
|
|
static char **worker(char **arr, char *s1, char c, size_t j)
|
|
{
|
|
size_t i;
|
|
char *str;
|
|
|
|
str = s1;
|
|
i = 0;
|
|
while (i < j)
|
|
{
|
|
if (*s1 != c)
|
|
{
|
|
arr[i] = word(s1, c);
|
|
if (!arr[i])
|
|
return (free_arr(arr, s1));
|
|
s1 = s1 + ft_strlen(arr[i]);
|
|
i++;
|
|
}
|
|
s1++;
|
|
}
|
|
arr[i] = NULL;
|
|
free(str);
|
|
return (arr);
|
|
}
|
|
|
|
char **ft_split(char const *s, char c)
|
|
{
|
|
char **w_arr;
|
|
char *s1;
|
|
size_t j;
|
|
|
|
s1 = ft_strdup(s);
|
|
if (!s1)
|
|
return (NULL);
|
|
j = words_count(s1, c);
|
|
w_arr = (char **)malloc(sizeof(char *) * (j + 1));
|
|
if (!w_arr)
|
|
return (NULL);
|
|
return (worker(w_arr, s1, c, j));
|
|
}
|