rework of parsing

This commit is contained in:
David Gailleton
2025-11-20 18:08:51 +01:00
parent 24887c810c
commit 942a76c371
3 changed files with 27 additions and 37 deletions

View File

@@ -6,59 +6,48 @@
/* By: dgaillet <dgaillet@student.42.fr> +#+ +:+ +#+ */ /* By: dgaillet <dgaillet@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2025/11/19 15:35:15 by dgaillet #+# #+# */ /* Created: 2025/11/19 15:35:15 by dgaillet #+# #+# */
/* Updated: 2025/11/20 14:36:01 by dgaillet ### ########lyon.fr */ /* Updated: 2025/11/20 18:07:52 by dgaillet ### ########lyon.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "ft_printf_bonus.h" #include "ft_printf_bonus.h"
#include "libft.h" #include "libft.h"
static int next_not_digit(char *str) static void get_padding(t_arg *arg, char *str)
{ {
int i; str--;
while (ft_isdigit(*str) && *str != '%')
i = 0; str--;
while (ft_isdigit(str[i])) str++;
i++; arg->padding = ft_atoi(str);
return (i);
}
static int nb_to_skip(char *str)
{
if (*str == '-')
return (1 + next_not_digit(&str[1]));
else if (*str == '0')
return (1 + next_not_digit(&str[1]));
else if (*str == '.')
return (1 + next_not_digit(&str[1]));
else if (*str == ' ')
return (1 + next_not_digit(&str[1]));
return (1);
} }
static void ft_parse_str(t_arg *arg, char *str, char main_arg) static void ft_parse_str(t_arg *arg, char *str, char main_arg)
{ {
if (*str != '0' && ft_isdigit(*str)) while (*str != main_arg && *str != '.')
{
arg->padding = ft_atoi(str);
str += nb_to_skip(str);
}
while (*str != main_arg)
{ {
if (*str == '-') if (*str == '-')
arg->minus = ft_atoi(&str[1]); arg->minus = ft_atoi(&str[1]);
else if (*str == '0') else if (*str == '0' && !ft_isdigit(str[-1]))
arg->zero = ft_atoi(&str[1]); arg->zero = ft_atoi(&str[1]);
else if (*str == '.')
arg->dot = ft_atoi(&str[1]);
else if (*str == '#') else if (*str == '#')
arg->hash = 1; arg->hash = 1;
else if (*str == ' ') else if (*str == ' ')
arg->space = ft_atoi(&str[1]); arg->space = ft_atoi(&str[1]);
else if (*str == '+') else if (*str == '+')
arg->plus = 1; arg->plus = 1;
str += nb_to_skip(str); str++;
} }
if (*str == '.')
{
arg->dot = ft_atoi(str + 1);
if (!(arg->minus >= 0 || arg->zero >= 0 || arg->hash >= 0
|| arg->space >= 0 || arg->plus >= 0))
get_padding(arg, str);
}
else if (!(arg->minus >= 0 || arg->zero >= 0 || arg->hash >= 0
|| arg->space >= 0 || arg->plus >= 0))
get_padding(arg, str);
} }
t_arg *ft_parsing(char *str) t_arg *ft_parsing(char *str)

View File

@@ -6,7 +6,7 @@
/* By: dgaillet <dgaillet@student.42.fr> +#+ +:+ +#+ */ /* By: dgaillet <dgaillet@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2025/11/17 12:26:23 by dgaillet #+# #+# */ /* Created: 2025/11/17 12:26:23 by dgaillet #+# #+# */
/* Updated: 2025/11/20 16:52:30 by dgaillet ### ########lyon.fr */ /* Updated: 2025/11/20 17:26:09 by dgaillet ### ########lyon.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -16,7 +16,6 @@
static int padding_size(int space, int plus, t_arg *arg, int nbr) static int padding_size(int space, int plus, t_arg *arg, int nbr)
{ {
int padding; int padding;
int dot;
int nbr_size; int nbr_size;
if (arg->padding < 0) if (arg->padding < 0)
@@ -27,7 +26,7 @@ static int padding_size(int space, int plus, t_arg *arg, int nbr)
else else
nbr_size = nbr_size_base(nbr, 10); nbr_size = nbr_size_base(nbr, 10);
if (arg->dot > nbr_size) if (arg->dot > nbr_size)
nbr_size = dot; nbr_size = arg->dot;
padding = padding - nbr_size; padding = padding - nbr_size;
if (arg->zero >= 0) if (arg->zero >= 0)
padding = padding - arg->zero; padding = padding - arg->zero;
@@ -45,6 +44,8 @@ static int print_nb_flags(t_arg *arg, int nbr)
if (arg->plus >= 0 && nbr > 0) if (arg->plus >= 0 && nbr > 0)
plus = 1; plus = 1;
else
plus = 0;
if (arg->plus >= 0 || arg->space < 0) if (arg->plus >= 0 || arg->space < 0)
space = 0; space = 0;
else else

6
test.c
View File

@@ -6,7 +6,7 @@
/* By: dgaillet <dgaillet@student.42.fr> +#+ +:+ +#+ */ /* By: dgaillet <dgaillet@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2025/11/20 16:11:53 by dgaillet #+# #+# */ /* Created: 2025/11/20 16:11:53 by dgaillet #+# #+# */
/* Updated: 2025/11/20 16:19:29 by dgaillet ### ########lyon.fr */ /* Updated: 2025/11/20 18:01:15 by dgaillet ### ########lyon.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -17,6 +17,6 @@
int main(void) int main(void)
{ {
printf("===\t-\t===\n\n"); printf("===\t-\t===\n\n");
printf("%d - ", printf("...%8.5i...\n", 34)); printf("%d - ", printf("...%10.s...\n", NULL));
printf("%d\n\n", ft_printf("...%8.5i...\n", 34)); printf("%d\n\n", ft_printf("...%10.s...\n", NULL));
} }