From d622367cfdc547b2d6cc3a7bfaaa7ed7a1301648 Mon Sep 17 00:00:00 2001 From: hugogogo Date: Mon, 27 Sep 2021 16:51:48 +0200 Subject: [PATCH] ajout des fonctions atol free_tab et isnumber --- Makefile | 13 +++- includes/libft.h | 3 + srcs/ft_any.c | 6 ++ srcs/ft_atoi.c | 18 ++--- srcs/ft_atol.c | 22 ++++++ srcs/ft_free_tab.c | 15 +++++ srcs/ft_isnumber.c | 19 ++++++ testing/includes/libftest.h | 6 +- testing/libftest | Bin 310296 -> 321368 bytes testing/srcs/test_abs.c | 13 ++-- testing/srcs/test_any.c | 129 +++++++++++++++++++++++++++++++++++- 11 files changed, 221 insertions(+), 23 deletions(-) create mode 100644 srcs/ft_atol.c create mode 100644 srcs/ft_free_tab.c create mode 100644 srcs/ft_isnumber.c diff --git a/Makefile b/Makefile index 69975a7..282d82c 100644 --- a/Makefile +++ b/Makefile @@ -14,6 +14,14 @@ DEPS = $(_DEP:%.h=$(IDIR)/%.h) CFLAGS = -I$(IDIR) CFLAGS += -Wall -Wextra -Werror -g3 +# ft_putstr +# ft_atoi +# ft_putchar +# ft_putnbrendl +# ft_putnbrendl_fd +# ft_putchar_fd +# ft_putnbr_fd + SRCS = ft_memset.c \ ft_bzero.c \ ft_memcpy.c \ @@ -25,6 +33,7 @@ SRCS = ft_memset.c \ ft_isalpha.c \ ft_isdigit.c \ ft_isalnum.c \ + ft_isnumber.c \ ft_isascii.c \ ft_isprint.c \ ft_toupper.c \ @@ -37,6 +46,7 @@ SRCS = ft_memset.c \ ft_strlcat.c \ ft_strnstr.c \ ft_atoi.c \ + ft_atol.c \ ft_calloc.c \ ft_strdup.c \ \ @@ -107,7 +117,8 @@ SRCS = ft_memset.c \ ft_greater.c \ ft_smaller.c \ ft_sign.c \ - ft_sqrt.c + ft_sqrt.c \ + ft_free_tab.c ODIR = ./builds diff --git a/includes/libft.h b/includes/libft.h index 6cd98a7..058d3e3 100644 --- a/includes/libft.h +++ b/includes/libft.h @@ -27,6 +27,7 @@ int ft_memcmp(const void *s1, const void *s2, size_t n); size_t ft_strlen(const char *str); int ft_isalpha(int c); int ft_isdigit(int c); +int ft_isnumber(char *nb); int ft_isalnum(int c); int ft_isascii(int c); int ft_isprint(int c); @@ -40,6 +41,7 @@ size_t ft_strlcpy(char *dst, const char *src, size_t size); size_t ft_strlcat(char *dst, const char *src, size_t size); char *ft_strnstr(const char *b, const char *l, size_t s); int ft_atoi(const char *str); +long ft_atol(const char *str); void *ft_calloc(size_t count, size_t size); char *ft_strdup(const char *s1); @@ -109,5 +111,6 @@ int ft_greater(int a, int b); int ft_smaller(int a, int b); int ft_sign(int i); int ft_sqrt(int i); +void ft_free_tab(char **tab); #endif diff --git a/srcs/ft_any.c b/srcs/ft_any.c index 349e3a9..9322945 100644 --- a/srcs/ft_any.c +++ b/srcs/ft_any.c @@ -10,6 +10,12 @@ /* */ /* ************************************************************************** */ +/* +** i don't understand the purpose of this function... +** it takes a 2D array, and for each array it checks +** if a function given in parameters is true or false +*/ + #include "libft.h" int ft_any(char **tab, int (*f)(char*)) diff --git a/srcs/ft_atoi.c b/srcs/ft_atoi.c index 01660a9..8d34949 100644 --- a/srcs/ft_atoi.c +++ b/srcs/ft_atoi.c @@ -14,26 +14,20 @@ int ft_atoi(const char *str) { - long long nbr; + long nbr; int i; - int n; + int negatif; i = 0; - n = 1; + negatif = 1; nbr = 0; while ((str[i] == ' ') || (str[i] > 8 && str[i] < 14)) i++; if (str[i] == '-') - n = -1; + negatif = -1; if (str[i] == '+' || str[i] == '-') i++; while (str[i] >= '0' && str[i] <= '9') - { - if ((nbr >= 922337203685477580 - && ((str[i] > 8 && n < 0) || (str[i] > 7 && n > 0)))) - return ((n > 0) ? -1 : 0); - else - nbr = nbr * 10 + (str[i++] - '0'); - } - return (nbr * n); + nbr = nbr * 10 + (str[i++] - '0'); + return (nbr * negatif); } diff --git a/srcs/ft_atol.c b/srcs/ft_atol.c new file mode 100644 index 0000000..1bf87cf --- /dev/null +++ b/srcs/ft_atol.c @@ -0,0 +1,22 @@ + +#include "libft.h" + +long ft_atol(const char *str) +{ + long long nbr; + int i; + int negatif; + + i = 0; + negatif = 1; + nbr = 0; + while ((str[i] == ' ') || (str[i] > 8 && str[i] < 14)) + i++; + if (str[i] == '-') + negatif = -1; + if (str[i] == '+' || str[i] == '-') + i++; + while (str[i] >= '0' && str[i] <= '9') + nbr = nbr * 10 + (str[i++] - '0'); + return (nbr * negatif); +} diff --git a/srcs/ft_free_tab.c b/srcs/ft_free_tab.c new file mode 100644 index 0000000..cc9c4bb --- /dev/null +++ b/srcs/ft_free_tab.c @@ -0,0 +1,15 @@ + +#include "libft.h" + +void ft_free_tab(char **tab) +{ + int i; + + i = 0; + while (tab[i] != NULL) + { + free(tab[i]); + i++; + } + free(tab); +} diff --git a/srcs/ft_isnumber.c b/srcs/ft_isnumber.c new file mode 100644 index 0000000..6ecc6c5 --- /dev/null +++ b/srcs/ft_isnumber.c @@ -0,0 +1,19 @@ + +#include "libft.h" + +int ft_isnumber(char *nb) +{ + int i; + + i = 0; + if (nb[i] == '+' || nb[i] == '-') + i++; + while (nb[i] != '\0') + { + if (ft_isdigit(nb[i]) == 0) + return (0); + i++; + } + return (1); +} + diff --git a/testing/includes/libftest.h b/testing/includes/libftest.h index 5d92e6b..d7d271c 100644 --- a/testing/includes/libftest.h +++ b/testing/includes/libftest.h @@ -1,7 +1,11 @@ #ifndef LIBFTEST_H # define LIBFTEST_H # include "libft.h" -# include +# include // for write +# include // for printf +# include // for malloc +# include // for strdup and strlen and strcmp +# include // for characters like isalpha or isdigit etc # define RED write(1, "\033[91m", 5); # define GREEN write(1, "\033[92m", 5); diff --git a/testing/libftest b/testing/libftest index 8085142291bf0f0ee85b87a59a10dc9cd26057b4..3e234135360c43288a1135cce68e45ccac00ee2c 100755 GIT binary patch delta 25912 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 diff --git a/testing/srcs/test_abs.c b/testing/srcs/test_abs.c index d3c42fd..f9c944e 100644 --- a/testing/srcs/test_abs.c +++ b/testing/srcs/test_abs.c @@ -1,6 +1,6 @@ #include "libftest.h" -void compare(int i, int ans) +void compare_abs(int i, int ans) { if (ft_abs(i) != ans) { @@ -15,10 +15,9 @@ void compare(int i, int ans) void test_abs(void) { - compare(-1, 1); - compare(0, 0); - compare(-0, 0); - compare(-1000, 1000); - compare(-2147483648, 2147483648); - compare(2147483647, 2147483647); + compare_abs(-1, 1); + compare_abs(0, 0); + compare_abs(-0, 0); + compare_abs(-1000, 1000); + compare_abs(-2147483647, 2147483647); } diff --git a/testing/srcs/test_any.c b/testing/srcs/test_any.c index 7bdbe9c..05b7692 100644 --- a/testing/srcs/test_any.c +++ b/testing/srcs/test_any.c @@ -1,6 +1,131 @@ #include "libftest.h" -//int test_any(char **tab, int (*f)(char*)) -void test_any(void) +char **create_tab(void) { + char **tab; + + tab = (char **)malloc(sizeof(char *) * (6 + 1)); + tab[0] = strdup("premiere ligne de test"); + tab[1] = strdup("deuxieme ligne de test"); + tab[2] = strdup("troisieme ligne pour le fun"); + tab[3] = strdup("quatrieme linge avec une erreur"); + tab[4] = strdup("cinquieme peche a la ligne"); + tab[5] = strdup("sixieme et derniere ligne"); + return (tab); } + +void free_tab(char **tab) +{ + free(tab[0]); + free(tab[1]); + free(tab[2]); + free(tab[3]); + free(tab[4]); + free(tab[5]); + free(tab); +} + +int contain_a(char *s) +{ + int i; + + i = -1; + while (s[++i]) + if (s[i] == 'a') + return (1); + return (0); +} + +int contain_y(char *s) +{ + int i; + + i = -1; + while (s[++i]) + if (s[i] == 'y') + return (1); + return (0); +} + +int contain_z(char *s) +{ + int i; + + i = -1; + while (s[++i]) + if (s[i] == 'z') + return (1); + return (0); +} + +int contain_x(char *s) +{ + int i; + + i = -1; + while (s[++i]) + if (s[i] == 'x') + return (1); + return (0); +} + +int contain_u(char *s) +{ + int i; + + i = -1; + while (s[++i]) + if (s[i] == 'u') + return (1); + return (0); +} + +int contain_1(char *s) +{ + int i; + + i = -1; + while (s[++i]) + if (s[i] == '1') + return (1); + return (0); +} + +void compare_any(char **tab, int (*f)(char *), char *s, int solution) +{ + int i; + + i = ft_any(tab, f); + if (i != solution) + { + write(1, "\033[91m", 5); + printf("error: "); + write(1, "\033[0m", 4); + printf("ft_any(tab, %s) returned", s); + printf(" %i ", i); + printf("in tab :\n"); + printf(" %s:\n", tab[0]); + printf(" %s:\n", tab[1]); + printf(" %s:\n", tab[2]); + printf(" %s:\n", tab[3]); + printf(" %s:\n", tab[4]); + printf(" %s:\n", tab[5]); + } +} + +void test_any(void) +{ + char **tab; + + tab = create_tab(); + + compare_any(tab, contain_a, "contain_a", 1); + compare_any(tab, contain_y, "contain_y", 0); + compare_any(tab, contain_z, "contain_z", 0); + compare_any(tab, contain_x, "contain_x", 1); + compare_any(tab, contain_u, "contain_u", 1); + compare_any(tab, contain_1, "contain_1", 0); + + free_tab(tab); +} +