From 01aab8912ca1b9383f684adcffb02f7eeb36f0e7 Mon Sep 17 00:00:00 2001 From: Hugo LAMY Date: Tue, 10 Mar 2020 17:45:13 +0100 Subject: [PATCH] en cours de flag espace --- Makefile | 1 + ft_printf.h | 10 ++- main.c | 123 +++++++++++++++++++++++++++++++-- outf.txt | 2 +- outft.txt | 2 +- srcs/ft_flag_transform.c | 15 ++-- srcs/ft_flag_transform_bonus.c | 39 +++++++++++ 7 files changed, 180 insertions(+), 12 deletions(-) create mode 100644 srcs/ft_flag_transform_bonus.c diff --git a/Makefile b/Makefile index 3cfe38e..5caf355 100644 --- a/Makefile +++ b/Makefile @@ -18,6 +18,7 @@ SRCS = ft_printf.c \ ft_next_word.c \ ft_convert.c \ ft_flag_transform.c \ + ft_flag_transform_bonus.c \ main.c ODIR = ./builds diff --git a/ft_printf.h b/ft_printf.h index 8c041c3..5010753 100644 --- a/ft_printf.h +++ b/ft_printf.h @@ -6,7 +6,7 @@ /* By: hulamy +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/27 12:07:47 by hulamy #+# #+# */ -/* Updated: 2020/02/27 12:08:40 by hulamy ### ########.fr */ +/* Updated: 2020/03/10 16:26:47 by hulamy ### ########.fr */ /* */ /* ************************************************************************** */ @@ -55,4 +55,12 @@ char *width_flags(char *print, char *s, int width, int zero); char *ft_width(char *s, char *print, int *size, char *type); char *ft_flag_transform(char *s, char *print, char *type, int *size); +/* +** ft_flag_transform_bonus.c +*/ + +char *ft_plus(char *s, char *print, char *type); +char *ft_sharp(char *s, char *print, char *type); +char *ft_sharp_again(char *s, char *print, char *type); + #endif diff --git a/main.c b/main.c index 5c6ac16..5ed0ee6 100644 --- a/main.c +++ b/main.c @@ -333,10 +333,6 @@ int main(int ac, char **av) // PRINT("%.0X", 0); // PRINT("%08i", 33333); // PRINT("%.i", 0); - PRINT("%+d", 12); - PRINT("%+d", -12); - PRINT("%+05d", 12); - PRINT("%+05d", -12); // PRINT("%+i", 12); // PRINT("%+i", -12); // PRINT("%+05i", -12); @@ -354,6 +350,51 @@ int main(int ac, char **av) // PRINT("%+s", "-12"); // PRINT("%+p", 12); // PRINT("%+p", -12); + // PRINT("%+d", 12); + // PRINT("%+d", -12); + // PRINT("%+05d", 12); + // PRINT("%+05d", -12); + // PRINT("%+01d", 12); + // PRINT("%+02d", 12); + // PRINT("%+03d", 12); + // PRINT("%+04d", 12); + // PRINT("%+4d", 12); + // PRINT("%.4d", 12); + // PRINT("%+.4d", 12); + // PRINT("%+4.4d", 12); + // PRINT("%.4d", -12); + // PRINT("%+.4d", -12); + // PRINT("%+4.4d", -12); + + // PRINT("%d --- %1d --- %2d --- %3d --- %4d --- %5d --- %6d", 123, 123, 123, 123, 123, 123, 123) + // PRINT("%.d -- %.0d -- %.1d -- %.2d -- %.3d -- %.4d -- %.5d -- %.6d", 123, 123, 123, 123, 123, 123, 123, 123) + // PRINT("%1.d - %1.0d - %1.1d - %1.2d - %1.3d - %1.4d - %1.5d - %1.6d", 123, 123, 123, 123, 123, 123, 123, 123) + // PRINT("%2.d - %2.0d - %2.1d - %2.2d - %2.3d - %2.4d - %2.5d - %2.6d", 123, 123, 123, 123, 123, 123, 123, 123) + // PRINT("%3.d - %3.0d - %3.1d - %3.2d - %3.3d - %3.4d - %3.5d - %3.6d", 123, 123, 123, 123, 123, 123, 123, 123) + // PRINT("%4.d - %4.0d - %4.1d - %4.2d - %4.3d - %4.4d - %4.5d - %4.6d", 123, 123, 123, 123, 123, 123, 123, 123) + // PRINT("%5.d - %5.0d - %5.1d - %5.2d - %5.3d - %5.4d - %5.5d - %5.6d", 123, 123, 123, 123, 123, 123, 123, 123) + // PRINT("%6.d - %6.0d - %6.1d - %6.2d - %6.3d - %6.4d - %6.5d - %6.6d", 123, 123, 123, 123, 123, 123, 123, 123) + // PRINT("%-d --- %-1d --- %-2d --- %-3d --- %-4d --- %-5d --- %-6d", 123, 123, 123, 123, 123, 123, 123) + // PRINT("%-.d -- %-.0d -- %-.1d -- %-.2d -- %-.3d -- %-.4d -- %-.5d -- %-.6d", 123, 123, 123, 123, 123, 123, 123, 123) + // PRINT("%-1.d - %-1.0d - %-1.1d - %-1.2d - %-1.3d - %-1.4d - %-1.5d - %-1.6d", 123, 123, 123, 123, 123, 123, 123, 123) + // PRINT("%-2.d - %-2.0d - %-2.1d - %-2.2d - %-2.3d - %-2.4d - %-2.5d - %-2.6d", 123, 123, 123, 123, 123, 123, 123, 123) + // PRINT("%-3.d - %-3.0d - %-3.1d - %-3.2d - %-3.3d - %-3.4d - %-3.5d - %-3.6d", 123, 123, 123, 123, 123, 123, 123, 123) + // PRINT("%-4.d - %-4.0d - %-4.1d - %-4.2d - %-4.3d - %-4.4d - %-4.5d - %-4.6d", 123, 123, 123, 123, 123, 123, 123, 123) + // PRINT("%-5.d - %-5.0d - %-5.1d - %-5.2d - %-5.3d - %-5.4d - %-5.5d - %-5.6d", 123, 123, 123, 123, 123, 123, 123, 123) + // PRINT("%-6.d - %-6.0d - %-6.1d - %-6.2d - %-6.3d - %-6.4d - %-6.5d - %-6.6d", 123, 123, 123, 123, 123, 123, 123, 123) + // PRINT("%0d --- %01d --- %02d --- %03d --- %04d --- %05d --- %06d", 123, 123, 123, 123, 123, 123, 123) + // PRINT("%0.d -- %0.0d -- %0.1d -- %0.2d -- %0.3d -- %0.4d -- %0.5d -- %0.6d", 123, 123, 123, 123, 123, 123, 123, 123) + // PRINT("%01.d - %01.0d - %01.1d - %01.2d - %01.3d - %01.4d - %01.5d - %01.6d", 123, 123, 123, 123, 123, 123, 123, 123) + // PRINT("%02.d - %02.0d - %02.1d - %02.2d - %02.3d - %02.4d - %02.5d - %02.6d", 123, 123, 123, 123, 123, 123, 123, 123) + // PRINT("%03.d - %03.0d - %03.1d - %03.2d - %03.3d - %03.4d - %03.5d - %03.6d", 123, 123, 123, 123, 123, 123, 123, 123) + // PRINT("%04.d - %04.0d - %04.1d - %04.2d - %04.3d - %04.4d - %04.5d - %04.6d", 123, 123, 123, 123, 123, 123, 123, 123) + // PRINT("%05.d - %05.0d - %05.1d - %05.2d - %05.3d - %05.4d - %05.5d - %05.6d", 123, 123, 123, 123, 123, 123, 123, 123) + // PRINT("%06.d - %06.0d - %06.1d - %06.2d - %06.3d - %06.4d - %06.5d - %06.6d", 123, 123, 123, 123, 123, 123, 123, 123) + +// PRINT(diuxXcsp) +// PRINT(h hh l ll) +// PRINT(0-) +// PRINT(#' +) } /* ////////////////////////////////////////////////////////////////// */ @@ -495,6 +536,29 @@ int main(int ac, char **av) PRINT("%.*i-%.*i", 0, 1, 2, 3); PRINT("%3.2i", 1); PRINT("%*.*i", 3, 2, 1); + PRINT("%*.*s", 3, 2, "1"); + PRINT("%s", "-1"); + PRINT("%1s", "-1"); + PRINT("%2s", "-1"); + PRINT("%3s", "-1"); + PRINT("%4s", "-1"); + PRINT("%.s", "-1"); + PRINT("%.1s", "-1"); + PRINT("%.2s", "-1"); + PRINT("%.3s", "-1"); + PRINT("%.4s", "-1"); + PRINT("%.s", "-1"); + PRINT("%1.1s", "-1"); + PRINT("%2.2s", "-1"); + PRINT("%3.3s", "-1"); + PRINT("%4.4s", "-1"); + PRINT("%4.3s", "-1"); + PRINT("%1.1s", "-1"); + PRINT("%2.2s", "-1"); + PRINT("%3.3s", "-1"); + PRINT("%4.4s", "-1"); + PRINT("%4.3s", "-1"); + PRINT("%4.3i", -1); } if (ac == 2 || !strcmp(av[2], "d")) @@ -857,6 +921,34 @@ int main(int ac, char **av) printf("\n----------------------------------------------------------------\n"); printf("flag ' '\n"); printf("----------------------------------------------------------------\n\n"); + PRINT("% d", 12); + PRINT("% d", -12); + PRINT("% 5d", 12); + PRINT("% 5d", -12); + PRINT("% 1d", -12); + PRINT("% 2d", -12); + PRINT("% 3d", -12); + PRINT("% 4d", -12); + PRINT("% 1d", 12); + PRINT("% 2d", 12); + PRINT("% 3d", 12); + PRINT("% 4d", 12); + PRINT("% 01d", -12); + PRINT("% 02d", -12); + PRINT("% 03d", -12); + PRINT("% 04d", -12); + PRINT("% 01d", 12); + PRINT("% 02d", 12); + PRINT("% 03d", 12); + PRINT("% 04d", 12); + PRINT("% .4d", 12); + PRINT("% 3.4d", 12); + PRINT("% 5.4d", -12); + PRINT("% 05.4d", -12); + PRINT("% 5.4d", 12); + PRINT("% 05.4d", 12); + PRINT("% 010d", 645); + PRINT("% 010d", -645); } if (ac == 2 || !strcmp(av[2], "+")) @@ -864,6 +956,29 @@ int main(int ac, char **av) printf("\n----------------------------------------------------------------\n"); printf("flag '+'\n"); printf("----------------------------------------------------------------\n\n"); + PRINT("%+d", 12); + PRINT("%+d", -12); + PRINT("%+5d", 12); + PRINT("%+5d", -12); + PRINT("%+1d", 12); + PRINT("%+2d", 12); + PRINT("%+3d", 12); + PRINT("%+4d", 12); + PRINT("%+05d", 12); + PRINT("%+05d", -12); + PRINT("%+01d", 12); + PRINT("%+02d", 12); + PRINT("%+03d", 12); + PRINT("%+04d", 12); + PRINT("%+4d", 12); + PRINT("%.4d", 12); + PRINT("%+.4d", 12); + PRINT("%+4.4d", 12); + PRINT("%.4d", -12); + PRINT("%+.4d", -12); + PRINT("%+4.4d", -12); + PRINT("%+010d", 645); + PRINT("%+010d", -645); } if (ac == 2 || !strcmp(av[2], "e")) diff --git a/outf.txt b/outf.txt index 2702ac7..66ab03d 100644 --- a/outf.txt +++ b/outf.txt @@ -1 +1 @@ --0012 + 123 - 123 - 123 - 123 - 123 - 0123 - 00123 - 000123 diff --git a/outft.txt b/outft.txt index 2702ac7..66ab03d 100644 --- a/outft.txt +++ b/outft.txt @@ -1 +1 @@ --0012 + 123 - 123 - 123 - 123 - 123 - 0123 - 00123 - 000123 diff --git a/srcs/ft_flag_transform.c b/srcs/ft_flag_transform.c index 6b29c9e..a1fc16d 100644 --- a/srcs/ft_flag_transform.c +++ b/srcs/ft_flag_transform.c @@ -108,15 +108,12 @@ char *width_flags(char *print, char *s, int width, int zero) } else { -// c = (ft_strchr(s, '0')) ? '0' : ' '; -// ft_memset(tmp, c, width - len); ft_memset(tmp, (ft_strchr(s, '0')) ? '0' : ' ', width - len); ft_memmove(ft_strchr(tmp, '\0') + zero, print, ft_strlen(print)); -// if (c == '0' && (minus = ft_strchr(tmp, '-'))) - if (ft_strchr(s, '0') && (minus = ft_strchr(tmp, '-'))) + if (ft_strchr(s, '0') && (minus = ft_strchrset("+-", tmp))) { + tmp[0] = (minus[0] == '+') ? '+' : '-'; minus[0] = '0'; - tmp[0] = '-'; } } free(print); @@ -167,13 +164,21 @@ char *ft_width(char *s, char *print, int *size, char *type) /* ** -go through all the transformation flags needs +** -first the precision +** -then if type is int and nbr is positive, add a + to the left, it's flag '+' +** -third the flag "#" +** -fourth, the width +** -then p ** -the case of 'p' is treated without any subtelness because i don't care */ char *ft_flag_transform(char *s, char *print, char *type, int *size) { print = ft_precision(s, print, type); + print = ft_plus(s, print, type); + print = ft_sharp(s, print, type); print = ft_width(s, print, size, type); + print = ft_sharp_again(s, print, type); if (ft_strchr(type, 'p')) { print = ft_concat_free(ft_strdup("0x"), print); diff --git a/srcs/ft_flag_transform_bonus.c b/srcs/ft_flag_transform_bonus.c new file mode 100644 index 0000000..c59ca31 --- /dev/null +++ b/srcs/ft_flag_transform_bonus.c @@ -0,0 +1,39 @@ + +#include "ft_printf.h" + +char *ft_plus(char *s, char *print, char *type) +{ + if (!ft_strchrset(type, "di")) + return (print); + if (ft_strchr(s, '+') && !ft_strchr(print, '-')) + print = ft_concat_free(ft_strdup("+"), print); + return (print); +} + +char *ft_sharp(char *s, char *print, char *type) +{ + if (ft_strchr(s, '#')) + { + if (ft_strchr(type, 'x')) + print = ft_concat_free(ft_strdup("0x"), print); + else + print = ft_concat_free(ft_strdup("0X"), print); + } + return (print); +} + +char *ft_sharp_again(char *s, char *print, char *type) +{ + char *tmp; + + if (!ft_strchr(s, '#')) + return (print); + if (print[0] == '0' && print[1] == '0' && ft_strchrset(type, "xX")) + { + tmp = ft_strchrset("xX", print); + print[1] = tmp[0]; + tmp[0] = '0'; + } + return (print); +} +