diff options
| author | Charles <sircharlesaze@gmail.com> | 2019-07-28 21:12:28 +0200 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2019-07-28 21:12:28 +0200 |
| commit | 5b653ccffdc33c8774697a93cad0b499b88dca71 (patch) | |
| tree | fef649e7cf39d62b7c0054ed17a00512e97d5a01 /ft_atoi.c | |
| parent | 4367fc2192172a3c867e4e94327f131f41e4880e (diff) | |
| download | libft-5b653ccffdc33c8774697a93cad0b499b88dca71.tar.gz libft-5b653ccffdc33c8774697a93cad0b499b88dca71.tar.bz2 libft-5b653ccffdc33c8774697a93cad0b499b88dca71.zip | |
std library function almost done, tested with libft-unit-tests
Diffstat (limited to 'ft_atoi.c')
| -rw-r--r-- | ft_atoi.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/ft_atoi.c b/ft_atoi.c new file mode 100644 index 0000000..94c42cc --- /dev/null +++ b/ft_atoi.c @@ -0,0 +1,33 @@ +#define MIN_INT (1 << 31) +#define MAX_INT (~(1 << 31)) + +int ft_atoi(const char *nptr) +{ + unsigned int nb; + int i; + int is_negative; + + while (*nptr == ' ' || *nptr == '\t'|| *nptr == '\n' + || *nptr == '\v'|| *nptr == '\f'|| *nptr == '\r') + nptr++; + is_negative = 0; + if (*nptr == '-' || *nptr == '+') + { + if (*nptr == '-') + is_negative = 1; + nptr++; + } + i = 0; + nb = 0; + while (nptr[i] >= '0' && nptr[i] <= '9') + { + if (!is_negative && nb > (unsigned int)MAX_INT) + return (-1); + else if (nb > (unsigned int)MIN_INT) + return (0); + nb *= 10; + nb += nptr[i] - '0'; + i++; + } + return ((int)(is_negative ? -nb : nb)); +} |
