aboutsummaryrefslogtreecommitdiff
path: root/ft_atoi.c
blob: 94c42ccc59b9ffc981c21b527e0d96c0bd1a6f29 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#define MIN_INT (1 << 31)
#define MAX_INT (~(1 << 31))

int ft_atoi(const char *nptr)
{
	unsigned int	nb;
	int	i;
	int	is_negative;

	while (*nptr == ' ' || *nptr == '\t'|| *nptr == '\n'
		   || *nptr == '\v'|| *nptr == '\f'|| *nptr == '\r')
		nptr++;
    is_negative = 0;
	if (*nptr == '-' || *nptr == '+')
	{
        if (*nptr == '-')
            is_negative = 1;
		nptr++;
	}
    i = 0;
    nb = 0;
	while (nptr[i] >= '0' && nptr[i] <= '9')
	{
        if (!is_negative && nb > (unsigned int)MAX_INT)
            return (-1);
        else if (nb > (unsigned int)MIN_INT)
            return (0);
        nb *= 10;
        nb += nptr[i] - '0';
        i++;
	}
	return ((int)(is_negative ? -nb : nb));
}