ex03 = ft_atoi
c
#include <unistd.h>
int find_num_length(char *str)
{
int n;
n = 0;
while (!(str[n] >= '0' && str[n] <= '9'))
n++;
return (n);
}
void print_rev_num(char *reversed)
{
while(*reversed != '\0')
write(1, reversed, 1);
reversed++;
}
void make_rev_num(char *str, char sign, int n)
{
int i;
char reversed[n + 1];
int x;
reversed[0] = sign;
reversed[n + 1] = '\0';
while (n > 0)
{
reversed[n] = str[i];
n--;
i++;
}
print_rev_num(reversed);
}
int ft_atoi(char *str)
{
int sign;
int num;
sign = 1;
while(*str != '\0')
{
if ((*str >= 9 && *str <= 13) || *str == 32)
{
str++;
continue ;
}
else if (*str == '+' || *str == '-')
{
if (*str == '+')
sign *= 1;
else
sign *= -1;
str++;
}
else if (*str >= '0' && *str <= '9')
make_rev_num(str, sign, find_num_length(str));
}
}
int main()
{
char *a = " ---+--+1234ab567";
ft_atoi(a);
}
ex04 = ft_putnbr_base
c
#include <unistd.h>
int find_same(char *str, char ch, int v)
{
while (str[v] != '\0')
{
if (str[v] == ch)
return (1);
v++;
}
return (0);
}
int checkdigit(char *base)
{
int i;
if (!*base || base[1] == '\0')
return (0);
i = 0;
while (base[i] != '\0')
{
if (base[i] == 43 || base[i] == 45)
return (0);
else if (find_same(base, base[i], i + 1) == 1)
return (0);
i++;
}
return (1);
}
int len(char *str)
{
int i;
i = 0;
while (str[i] != '\0')
i++;
return (i);
}
void write_base(long long x, char *str, int n)
{
if (x < 0)
{
write(1, "-", 1);
write_base(-x, str, n);
}
else if (x < n)
write(1, &str[x], 1);
else
{
write_base(x / n, str, n);
write_base(x % n, str, n);
}
}
void ft_putnbr_base(int nbr, char *base)
{
if (checkdigit(base) == 0)
return ;
write_base((long long)nbr, base, len(base));
}
ex05 = ft_atoi_base
c
int insider(char ch, char *base)
{
int i;
i = 0;
while (base[i] != '\0')
{
if (ch == base[i])
return (i);
i++;
}
return (-1);
}
int len(char *base)
{
int i;
i = 0;
while (base[i] != '\0')
i++;
return (i);
}
int checkminus(char *str)
{
int flag;
flag = 0;
while ((*str >= 9 && *str <= 13) || *str == 32)
str++;
while (*str == '-' || *str == '+')
{
if (*str == '-')
flag++;
str++;
}
return (flag % 2);
}
int checkbase(char *base)
{
int i;
int temp;
i = 0;
while (base[i] != '\0')
{
temp = 1;
if (base[i] == '+' || base[i] == '-')
return (0);
else if ((base[i] >= 9 && base[i] <= 13) || base[i] == 32)
return (0);
while (temp <= i)
{
if (base[i] == base[i - temp])
return (0);
temp++;
}
i++;
}
return (1);
}
int ft_atoi_base(char *str, char *base)
{
int i;
int sign;
int number;
i = 0;
sign = 1;
if (checkbase(base) == 0)
return (0);
if (checkminus(str) == 1)
sign = -1;
while ((str[i] >= 9 && str[i] <= 13) || str[i] == 32)
i++;
while (str[i] == '-' || str[i] == '+')
i++;
number = 0;
while (insider(str[i], base) != -1 && str[i] != '\0')
{
number *= len(base);
number += insider(str[i], base);
i++;
}
return (sign * number);
}