diff options
Diffstat (limited to 'ft_atoi.c')
| -rw-r--r-- | ft_atoi.c | 34 |
1 files changed, 12 insertions, 22 deletions
@@ -6,48 +6,38 @@ /* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/10/07 09:46:16 by cacharle #+# #+# */ -/* Updated: 2019/10/19 10:50:39 by cacharle ### ########.fr */ +/* Updated: 2019/11/20 01:43:18 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ +#include "libft.h" + #define MIN_INT -2147483648 #define MAX_INT 2147483647 -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); + while (*str == ' ' || *str == '\t' || *str == '\n' + || *str == '\v' || *str == '\f' || *str == '\r') + str++; + is_negative = 0; + if (*str == '-' || *str == '+') + if (*str++ == '-') + is_negative = 1; i = 0; nb = 0; - while (str[i] >= '0' && str[i] <= '9') + while (ft_isdigit(str[i])) { 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++; + nb += str[i++] & 0x0F; } return ((int)(is_negative ? -nb : nb)); } |
