diff options
| author | Charles <sircharlesaze@gmail.com> | 2019-07-10 06:41:44 +0200 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2019-07-10 06:41:44 +0200 |
| commit | c2bf9fcefbb4453cee271ccd1af9674ad2f3a181 (patch) | |
| tree | 9c8ea6e70b228ca843d6a15d78d032d215413c4a /c07/ex04/ft_convert_base.c | |
| parent | e0b1620a22c5fcd673ab78c4d8ce2c649a2cc2fc (diff) | |
| download | piscine-c2bf9fcefbb4453cee271ccd1af9674ad2f3a181.tar.gz piscine-c2bf9fcefbb4453cee271ccd1af9674ad2f3a181.tar.bz2 piscine-c2bf9fcefbb4453cee271ccd1af9674ad2f3a181.zip | |
c12 start
Diffstat (limited to 'c07/ex04/ft_convert_base.c')
| -rw-r--r-- | c07/ex04/ft_convert_base.c | 106 |
1 files changed, 96 insertions, 10 deletions
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 <charles.cabergs@gmail.com> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* 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; + } |
