/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* ft_atoi.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: cacharle +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/10/07 09:46:16 by cacharle #+# #+# */ /* Updated: 2019/10/07 14:04:17 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ #define MIN_INT (1 << 31) #define MAX_INT (~(1 << 31)) static int precheck(const char **str) { int is_negative; while (**str == ' ' || **str == '\t' || **str == '\n' || **str == '\v' || **str == '\f' || **str == '\r') (*str)++; is_negative = 0; if (**str == '-' || **str == '+') { if (**str == '-') is_negative = 1; (*str)++; } return (is_negative); } int ft_atoi(const char *str) { unsigned int nb; int i; int is_negative; is_negative = precheck(&str); i = 0; nb = 0; while (str[i] >= '0' && str[i] <= '9') { if (!is_negative && nb > (unsigned int)MAX_INT) return (-1); else if (nb > (unsigned int)MIN_INT) return (0); nb *= 10; nb += str[i] - '0'; i++; } return ((int)(is_negative ? -nb : nb)); }