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_atoi.c \
ft_atol.c \ ft_atol.c \
ft_atof.c \
ft_itoa.c \ ft_itoa.c \
ft_utoa.c \ ft_utoa.c \
ft_atoibase.c \
\ \
ft_putchar.c \ ft_putchar.c \
ft_putstr.c \ ft_putstr.c \
@@ -94,7 +96,6 @@ SRCS = ft_memset.c \
ft_lstcopy.c \ ft_lstcopy.c \
\ \
ft_any.c \ ft_any.c \
ft_atoibase.c \
ft_convertbase.c \ ft_convertbase.c \
ft_convertbase_free.c \ ft_convertbase_free.c \
ft_foreach.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); char *ft_strnstr(const char *b, const char *l, size_t s);
int ft_atoi(const char *str); int ft_atoi(const char *str);
long ft_atol(const char *str); long ft_atol(const char *str);
double ft_atof(const char *str);
void *ft_calloc(size_t count, size_t size); void *ft_calloc(size_t count, size_t size);
char *ft_strdup(const char *s1); 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

@@ -12,22 +12,29 @@
#include "libft.h" #include "libft.h"
int ft_atoi(const char *str) int ft_atoi(const char *str)
{ {
long nbr; long nbr;
int i; int i;
int negatif; int negatif;
i = 0; i = 0;
negatif = 1; negatif = 1;
nbr = 0; nbr = 0;
// Skip leading whitespace
while ((str[i] == ' ') || (str[i] > 8 && str[i] < 14)) while ((str[i] == ' ') || (str[i] > 8 && str[i] < 14))
i++; i++;
// Handle optional sign
if (str[i] == '-') if (str[i] == '-')
negatif = -1; negatif = -1;
if (str[i] == '+' || str[i] == '-') if (str[i] == '+' || str[i] == '-')
i++; i++;
// parse integer
while (str[i] >= '0' && str[i] <= '9') while (str[i] >= '0' && str[i] <= '9')
nbr = nbr * 10 + (str[i++] - '0'); nbr = nbr * 10 + (str[i++] - '0');
return (nbr * negatif); return (nbr * negatif);
} }

View File

@@ -1,22 +1,29 @@
#include "libft.h" #include "libft.h"
long ft_atol(const char *str) long ft_atol(const char *str)
{ {
long long nbr; long long nbr;
int i; int i;
int negatif; int negatif;
i = 0; i = 0;
negatif = 1; negatif = 1;
nbr = 0; nbr = 0;
// Skip leading whitespace
while ((str[i] == ' ') || (str[i] > 8 && str[i] < 14)) while ((str[i] == ' ') || (str[i] > 8 && str[i] < 14))
i++; i++;
// Handle optional sign
if (str[i] == '-') if (str[i] == '-')
negatif = -1; negatif = -1;
if (str[i] == '+' || str[i] == '-') if (str[i] == '+' || str[i] == '-')
i++; i++;
// parse integer
while (str[i] >= '0' && str[i] <= '9') while (str[i] >= '0' && str[i] <= '9')
nbr = nbr * 10 + (str[i++] - '0'); nbr = nbr * 10 + (str[i++] - '0');
return (nbr * negatif); return (nbr * negatif);
} }