adding itoa_static and ft_nbrlen

This commit is contained in:
hugogogo
2026-05-07 03:06:16 +02:00
parent b768ac1a14
commit 36379f56b0
4 changed files with 102 additions and 0 deletions

View File

@@ -37,6 +37,7 @@ SRCS = ft_memset.c \
ft_tolower.c \
\
ft_strlen.c \
ft_nbrlen.c \
ft_strchr.c \
ft_strrchr.c \
ft_strchrset.c \
@@ -75,6 +76,7 @@ SRCS = ft_memset.c \
ft_atoll_superscript.c \
ft_atof.c \
ft_itoa.c \
ft_itoa_static.c \
ft_utoa.c \
ft_atoibase.c \
\

View File

@@ -27,6 +27,7 @@ void *ft_memmove(void *dst, const void *src, size_t len);
void *ft_memchr(const void *s, int c, size_t n);
int ft_memcmp(const void *s1, const void *s2, size_t n);
size_t ft_strlen(const char *str);
size_t ft_nbrlen(int nbr);
int ft_isalpha(int c);
int ft_isdigit(int c);
int ft_isdigit_superscript(const char *input, int *size);
@@ -60,6 +61,7 @@ size_t ft_strjoin_static(char *dst, size_t dst_size, const char **srcs, size_t n
char *ft_strtrim(char const *s1, char const *set);
char **ft_split(char const *s, char c);
char *ft_itoa(long int n);
char *ft_itoa_static(long int nbr, char *buffer, size_t nbr_len);
char *ft_utoa(unsigned long int n);
char *ft_strmapi(char const *s, char (*f)(unsigned int, char));

82
srcs/ft_itoa_static.c Normal file
View File

@@ -0,0 +1,82 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_itoa.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: hulamy <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/11/25 13:59:01 by hulamy #+# #+# */
/* Updated: 2020/02/19 15:44:04 by hulamy ### ########.fr */
/* */
/* ************************************************************************** */
/**
* Converts a long integer to its string representation and stores it in a pre-allocated buffer.
*
* @param nbr The long integer to convert.
* @param buffer The buffer to store the resulting string. Must be pre-allocated.
* @param buff_len The size of the buffer.
* Must be at least as large as the length of the number (including sign).
*
* @return The buffer (if successful), or NULL if the buffer is too small or invalid.
*/
#include "libft.h"
char *ft_itoa_static(long int nbr, char *buffer, size_t buff_len)
{
int is_negative;
const char *min_str;
size_t min_len;
size_t i;
if (buffer == NULL || buff_len == 0)
{
return NULL; // Invalid buffer or length
}
// Handle LONG_MIN separately
if (nbr == LONG_MIN)
{
min_str = "-9223372036854775808";
min_len = ft_strlen(min_str);
if (buff_len < min_len)
{
return NULL; // Buffer too small for LONG_MIN
}
i = 0;
while (i < min_len)
{
buffer[i] = min_str[i];
i++;
}
buffer[min_len] = '\0'; // Null-terminate
return buffer;
}
// Determine if the number is negative
is_negative = ft_sign_f(nbr);
if (is_negative)
{
nbr = -nbr; // Make nbr positive for processing
}
// Write the null terminator at the end
buffer[buff_len] = '\0';
// Write the digits in reverse order
i = buff_len - 1;
do
{
buffer[i--] = (nbr % 10) + '0';
nbr /= 10;
} while (nbr != 0);
// Add the negative sign if needed
if (is_negative)
{
buffer[0] = '-';
}
return buffer;
}

16
srcs/ft_nbrlen.c Normal file
View File

@@ -0,0 +1,16 @@
#include "libft.h"
// return length of int
// eg. 123 -> 3, -123 -> 4
size_t ft_nbrlen(int nbr)
{
int len;
len = (nbr < 0) ? 2 : 1;
while (nbr /= 10)
len++;
return len;
}