add ft_atof
This commit is contained in:
3
Makefile
3
Makefile
@@ -67,8 +67,10 @@ SRCS = ft_memset.c \
|
||||
\
|
||||
ft_atoi.c \
|
||||
ft_atol.c \
|
||||
ft_atof.c \
|
||||
ft_itoa.c \
|
||||
ft_utoa.c \
|
||||
ft_atoibase.c \
|
||||
\
|
||||
ft_putchar.c \
|
||||
ft_putstr.c \
|
||||
@@ -94,7 +96,6 @@ SRCS = ft_memset.c \
|
||||
ft_lstcopy.c \
|
||||
\
|
||||
ft_any.c \
|
||||
ft_atoibase.c \
|
||||
ft_convertbase.c \
|
||||
ft_convertbase_free.c \
|
||||
ft_foreach.c \
|
||||
|
||||
@@ -43,6 +43,7 @@ size_t ft_strlcat(char *dst, const char *src, size_t size);
|
||||
char *ft_strnstr(const char *b, const char *l, size_t s);
|
||||
int ft_atoi(const char *str);
|
||||
long ft_atol(const char *str);
|
||||
double ft_atof(const char *str);
|
||||
void *ft_calloc(size_t count, size_t size);
|
||||
char *ft_strdup(const char *s1);
|
||||
|
||||
|
||||
42
srcs/ft_atof.c
Normal file
42
srcs/ft_atof.c
Normal file
@@ -0,0 +1,42 @@
|
||||
#include <stdio.h>
|
||||
#include "libft.h"
|
||||
|
||||
double ft_atof(const char *str)
|
||||
{
|
||||
double nbr;
|
||||
int i;
|
||||
int negatif;
|
||||
double fraction;
|
||||
|
||||
i = 0;
|
||||
negatif = 1;
|
||||
nbr = 0.0;
|
||||
fraction = 1.0;
|
||||
|
||||
// Skip leading whitespace
|
||||
while ((str[i] == ' ') || (str[i] > 8 && str[i] < 14))
|
||||
i++;
|
||||
|
||||
// Handle optional sign
|
||||
if (str[i] == '-')
|
||||
negatif = -1;
|
||||
if (str[i] == '+' || str[i] == '-')
|
||||
i++;
|
||||
|
||||
// Parse integer part
|
||||
while (str[i] >= '0' && str[i] <= '9')
|
||||
nbr = nbr * 10.0 + (str[i++] - '0');
|
||||
|
||||
// Parse fractional part if '.' is present
|
||||
if (str[i] == '.')
|
||||
{
|
||||
i++;
|
||||
while (str[i] >= '0' && str[i] <= '9')
|
||||
{
|
||||
fraction /= 10.0;
|
||||
nbr += (str[i++] - '0') * fraction;
|
||||
}
|
||||
}
|
||||
|
||||
return (nbr * negatif);
|
||||
}
|
||||
@@ -21,13 +21,20 @@ int ft_atoi(const char *str)
|
||||
i = 0;
|
||||
negatif = 1;
|
||||
nbr = 0;
|
||||
|
||||
// Skip leading whitespace
|
||||
while ((str[i] == ' ') || (str[i] > 8 && str[i] < 14))
|
||||
i++;
|
||||
|
||||
// Handle optional sign
|
||||
if (str[i] == '-')
|
||||
negatif = -1;
|
||||
if (str[i] == '+' || str[i] == '-')
|
||||
i++;
|
||||
|
||||
// parse integer
|
||||
while (str[i] >= '0' && str[i] <= '9')
|
||||
nbr = nbr * 10 + (str[i++] - '0');
|
||||
|
||||
return (nbr * negatif);
|
||||
}
|
||||
|
||||
@@ -10,13 +10,20 @@ long ft_atol(const char *str)
|
||||
i = 0;
|
||||
negatif = 1;
|
||||
nbr = 0;
|
||||
|
||||
// Skip leading whitespace
|
||||
while ((str[i] == ' ') || (str[i] > 8 && str[i] < 14))
|
||||
i++;
|
||||
|
||||
// Handle optional sign
|
||||
if (str[i] == '-')
|
||||
negatif = -1;
|
||||
if (str[i] == '+' || str[i] == '-')
|
||||
i++;
|
||||
|
||||
// parse integer
|
||||
while (str[i] >= '0' && str[i] <= '9')
|
||||
nbr = nbr * 10 + (str[i++] - '0');
|
||||
|
||||
return (nbr * negatif);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user