add ft_atof

This commit is contained in:
hugogogo
2026-04-29 00:52:48 +02:00
parent 2be81d5630
commit f86c2cf5cb
5 changed files with 67 additions and 9 deletions

View File

@@ -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 \

View File

@@ -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
View 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);
}

View File

@@ -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);
}

View File

@@ -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);
}