ft_atoi - gabrielcoelhodacunha-old/42sp-libft GitHub Wiki

Description

Converts the string nptr to an integer.

Implementation

int	ft_atoi(const char *nptr)
{
	int		sign;
	long	nbr;

	remove_whitespaces(&nptr);
	sign = determine_sign(&nptr);
	nbr = 0;
	while (ft_isdigit(*nptr)
		&& nbr >= INT_MIN && nbr <= INT_MAX)
		nbr = nbr * 10 + (*(nptr++) - '0');
	nbr *= sign;
	if (nbr < INT_MIN)
		return (0);
	if (nbr > INT_MAX)
		return (-1);
	return (nbr);
}

static int	determine_sign(const char **nptr)
{
	int	sign;

	sign = 1;
	if (**nptr == '-')
		sign = -1;
	if (**nptr == '-' || **nptr == '+')
		(*nptr)++;
	return (sign);
}

static void	remove_whitespaces(const char **nptr)
{
	while (ft_isspace(**nptr))
		(*nptr)++;
}

static int	ft_isspace(int c)
{
	return (c == '\t' || c == '\n' || c == '\v'
		|| c == '\f' || c == '\r' || c == ' ');
}

References