aboutsummaryrefslogtreecommitdiff
path: root/ft_atoi.c
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2019-11-20 01:06:49 +0100
committerCharles <sircharlesaze@gmail.com>2019-11-20 01:44:43 +0100
commita46f13dc1fef2af96f418984af9db6acfeaeb581 (patch)
treee8952acaba6442d3968d270c172884d0bfdcf5db /ft_atoi.c
parentfbd1d450b0c2da394cbb02fd61ab75b2719bfb72 (diff)
downloadlibft-a46f13dc1fef2af96f418984af9db6acfeaeb581.tar.gz
libft-a46f13dc1fef2af96f418984af9db6acfeaeb581.tar.bz2
libft-a46f13dc1fef2af96f418984af9db6acfeaeb581.zip
Taking advantage of the ascii table tricks
ft_toupper, ft_tolower, ft_atoi, ft_itoa
Diffstat (limited to 'ft_atoi.c')
-rw-r--r--ft_atoi.c34
1 files changed, 12 insertions, 22 deletions
diff --git a/ft_atoi.c b/ft_atoi.c
index 17488fa..bfba860 100644
--- a/ft_atoi.c
+++ b/ft_atoi.c
@@ -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));
}