en cours de flag espace

This commit is contained in:
Hugo LAMY
2020-03-10 17:45:13 +01:00
parent d2f5890fe1
commit 01aab8912c
7 changed files with 180 additions and 12 deletions

View File

@@ -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

View File

@@ -6,7 +6,7 @@
/* By: hulamy <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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

123
main.c
View File

@@ -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"))

View File

@@ -1 +1 @@
-0012
123 - 123 - 123 - 123 - 123 - 0123 - 00123 - 000123

View File

@@ -1 +1 @@
-0012
123 - 123 - 123 - 123 - 123 - 0123 - 00123 - 000123

View File

@@ -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);

View File

@@ -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);
}