ft_atoi.c
1 /* ************************************************************************** */ 2 /* */ 3 /* ::: :::::::: */ 4 /* ft_atoi.c :+: :+: :+: */ 5 /* +:+ +:+ +:+ */ 6 /* By: gychoi <marvin@42.fr> +#+ +:+ +#+ */ 7 /* +#+#+#+#+#+ +#+ */ 8 /* Created: 2022/07/09 13:29:42 by gychoi #+# #+# */ 9 /* Updated: 2022/07/16 13:43:02 by gychoi ### ########.fr */ 10 /* */ 11 /* ************************************************************************** */ 12 13 #include "libft.h" 14 15 int is_space(const char *str, int i) 16 { 17 if (str[i] == '\t' || str[i] == '\n' || str[i] == '\v' \ 18 || str[i] == '\f' || str[i] == '\r' || str[i] == ' ') 19 return (1); 20 return (0); 21 } 22 23 int ft_atoi(const char *str) 24 { 25 int i; 26 int sign; 27 unsigned long long v; 28 unsigned long long t; 29 30 i = 0; 31 sign = 1; 32 v = 0; 33 while (is_space(str, i)) 34 i++; 35 if (str[i] == '-' || str[i] == '+') 36 { 37 if (str[i++] == '-') 38 sign *= -1; 39 } 40 while (('0' <= str[i] && str[i] <= '9') && str[i] != '\0') 41 { 42 v = v * 10 + (str[i++] - '0'); 43 if (sign < 0 && (v > 9223372036854775807 || (i > 19 && v < t))) 44 return (0); 45 if (v > 9223372036854775807 || (i > 18 && v < t)) 46 return (-1); 47 t = v; 48 } 49 return ((int)(v * sign)); 50 }