From c2bf9fcefbb4453cee271ccd1af9674ad2f3a181 Mon Sep 17 00:00:00 2001 From: Charles Date: Wed, 10 Jul 2019 06:41:44 +0200 Subject: c12 start --- c07/ex04/ft_convert_base.c | 106 ++++++++++++++++++++++++++++++++++++++++----- c07/ex05/ft_split.c | 55 ++++++++++++++--------- c07/main.c | 30 ++++++------- 3 files changed, 144 insertions(+), 47 deletions(-) (limited to 'c07') diff --git a/c07/ex04/ft_convert_base.c b/c07/ex04/ft_convert_base.c index f50289a..f30c3e5 100644 --- a/c07/ex04/ft_convert_base.c +++ b/c07/ex04/ft_convert_base.c @@ -6,7 +6,7 @@ /* By: cacharle +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/07/08 16:16:53 by cacharle #+# #+# */ -/* Updated: 2019/07/09 09:05:47 by cacharle ### ########.fr */ +/* Updated: 2019/07/10 06:37:09 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -46,20 +46,106 @@ int ft_pow(int base, int exponent) return (accumulator); } -int ft_atoi_base(char *nbr, char *base) + +int position_in_base(char digit, char *base) { + int i; + i = 0; + while (base[i] != digit) + i++; + return (i); +} + +// CHECK THE STR NOT JUST THE BASE (you idiot) +int ft_atoi_base(char *str, char *base) +{ + int radix; + int i; + int j; + int nb; + + if (!check_base(base)) + return (0); + nb = 0; + radix = 0; + while (base[radix]) + radix++; + i = 0; + while (str[i]) + i++; + j = 0; + while (--i >= 0) + { + nb += ft_pow(radix, i) * position_in_base(str[j], base); + j++; + } + return (nb); +} + +int some_strlen(char *str) +{ + int counter; + + counter = 0; + while (str[counter]) + counter++; + return (counter); +} + +char *to_base(int nbr, char *base) +{ + int radix; + int i; + unsigned int nbu; + char rev_digits[1024]; + char *ret; + int j; + int is_negative; + + /*if (!check_base(base))*/ + /*return (NULL);*/ + radix = some_strlen(base); + nbu = nbr; + is_negative = 0; + if (nbr < 0) + { + is_negative = 1; + nbu = -nbr; + } + i = 0; + printf("%d %s %d\n", radix, base, nbr); + while (nbu > 0) + { + printf("%u\n", nbu % radix); + rev_digits[i] = base[nbu % radix]; + nbu /= radix; + i++; + } + ret = malloc(sizeof(char) * i + (is_negative ? 1 : 0)); + j = 0; + if (is_negative) + { + ret[0] = '-'; + j++; + } + while (i-- > 0) + ret[j++] = rev_digits[i]; + ret[j] = '\0'; + for (int i = 0; i < 4; i++) + printf("%c ", rev_digits[i]); + printf("\n"); + for (int i = 0; i < 4; i++) + printf("%c ", ret[i]); + printf("\n"); + return (ret); } char *ft_convert_base(char *nbr, char *base_from, char *base_to) { int converted_nb; - char *converted_to - - if (!check_base(base_from) || !check_base(base_to)) - return (NULL); - converted_nb = ft_atoi_base(nbr, base_from); - printf("%d\n", convert_nb); - /*converted_to = ft_itoa_base(converted_nb, base_to);*/ - /*return (converted_to);*/ + + int nb; + return NULL; + } diff --git a/c07/ex05/ft_split.c b/c07/ex05/ft_split.c index da2d7fc..956782f 100644 --- a/c07/ex05/ft_split.c +++ b/c07/ex05/ft_split.c @@ -6,44 +6,59 @@ /* By: cacharle +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/07/08 15:58:03 by cacharle #+# #+# */ -/* Updated: 2019/07/09 09:40:49 by cacharle ### ########.fr */ +/* Updated: 2019/07/09 12:42:21 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ #include +int in_charset(char character, char *charset) +{ + while (*charset) + if (character == *charset++) + return (1); + return (0); +} + int count_segment(char *str, char *charset) { int counter; - int i; - counter = 0; + counter = 1; while (*str) { - i = 0; - while (charset[i]) - if (str++ == charset[i++]) - counter++; + if (in_charset(*str, charset)) + counter++; str++; } return (counter); } -int strlen_until_sep(char *str, char *charset) -{ - -} - -char **ft_split(char *str, char *charset) +char **ft_split(char *str, char *charset) { - char **strs; + char **strs; + char *tmp; + int i; + int j; + int k; - strs = (char**)malloc(sizeof(char*) * count_segment(str, charset)); + strs = (char**)malloc(sizeof(char*) * (count_segment(str, charset) + 1)); printf("%d\n", count_segment(str, charset)); - /*while (*str)*/ - /*{*/ - - /*str++;*/ - /*}*/ + k = 0; + while (*str) + { + i = 0; + while (!in_charset(str[i], charset)) + i++; + tmp = (char*)malloc(sizeof(char) * i); + if (tmp == NULL) + printf("bonjour"); + i = 0; + while (!in_charset(*str, charset)) + tmp[i++] = *str++; + strs[k++] = tmp; + str++; + } + strs[k] = 0; return (strs); } diff --git a/c07/main.c b/c07/main.c index 477a0b7..729720b 100644 --- a/c07/main.c +++ b/c07/main.c @@ -1,15 +1,3 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* main.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: cacharle +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2019/07/08 08:19:02 by cacharle #+# #+# */ -/* Updated: 2019/07/09 09:42:11 by cacharle ### ########.fr */ -/* */ -/* ************************************************************************** */ - #include #include #include @@ -17,7 +5,7 @@ #include "ex01/ft_range.c" #include "ex02/ft_ultimate_range.c" #include "ex03/ft_strjoin.c" -/*#include "ex04/ft_strdup.c"*/ +#include "ex04/ft_convert_base.c" #include "ex05/ft_split.c" int main() @@ -59,10 +47,18 @@ int main() free(join); printf("\n---------------\n"); - char *str = "bon,je,suis,charles"; - char *charset = ","; - char **sstrs = ft_split(str, charset); - free(sstrs); + printf("%s\n", ft_convert_base("101010", "01", "0123456789")); + printf("%s\n", to_base(34, "10")); + + /*printf("\n---------------\n");*/ + /*char *str = "bon.je.suis,asdofoisafj.ladjsf";*/ + /*char *charset = "";*/ + /*char **sstrs = ft_split(str, charset);*/ + /*for (int i = 0; sstrs[i] != 0; i++)*/ + /*printf("%s\n", sstrs[i]);*/ + /*for (int i = 0; sstrs[i] != 0; i++)*/ + /*free(sstrs[i]);*/ + /*free(sstrs);*/ return 0; } -- cgit