add ft_atof
This commit is contained in:
3
Makefile
3
Makefile
@@ -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 \
|
||||||
|
|||||||
@@ -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
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);
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user