piscine/c04/ex04/ft_putnbr_base.c
Willem Haffmans 607ce08c18 all
2024-09-10 00:18:01 +02:00

91 lines
1.8 KiB
C

/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_putnbr_base.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: whaffman <whaffman@student.codam.nl> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/06/11 17:49:33 by whaffman #+# #+# */
/* Updated: 2024/06/12 18:50:38 by whaffman ### ########.fr */
/* */
/* ************************************************************************** */
#include <unistd.h>
int ft_strlen(char *str)
{
int n;
n = 0;
while (str[n])
n++;
return (n);
}
int ft_isrepeating(char *str)
{
int i;
while (*str)
{
i = 1;
while (str[i])
{
if (str[0] == str[i])
return (1);
i++;
}
str++;
}
return (0);
}
int ft_contains_illegal_char(char *str)
{
while (*str)
{
if (*str == '-' || *str == '+')
return (1);
str++;
}
return (0);
}
void ft_putnbr_base(int nbr, char *base)
{
int b;
b = ft_strlen(base);
if (ft_isrepeating(base) || b < 2 || ft_contains_illegal_char(base))
return ;
if (nbr >= 0 && nbr < b)
{
write(1, &base[nbr], 1);
}
else if (nbr < 0)
{
write(1, "-", 1);
if (nbr > -b)
ft_putnbr_base(-nbr, base);
else
{
ft_putnbr_base(nbr / (-b), base);
ft_putnbr_base(-(nbr % b), base);
}
}
else if (nbr >= b)
{
ft_putnbr_base(nbr / b, base);
ft_putnbr_base(nbr % b, base);
}
}
#ifdef DEBUG
int main(void)
{
ft_putnbr_base(123, "012345678");
}
#endif