nicolas-arnaud
2 years ago
13 changed files with 387 additions and 96 deletions
@ -1,3 +1,3 @@ |
|||||
[submodule "libft"] |
[submodule "libft"] |
||||
path = libft |
path = libft |
||||
url = git@45.76.46.66:narnaud/libft.git |
url = git@narnaud.net:nicolas-arnaud/libft.git |
||||
|
@ -1 +1 @@ |
|||||
Subproject commit 0ba7ffd7c6a28b0f02cc937d32773fb9d4095eca |
Subproject commit 840a26935181c35cd8416853f1aad9a0bf99621f |
@ -0,0 +1,8 @@ |
|||||
|
#include "ft_printf.h" |
||||
|
|
||||
|
|
||||
|
int main(void) |
||||
|
{ |
||||
|
ft_printf("%.4s\n", "Hello world!\n"); |
||||
|
return 0; |
||||
|
} |
@ -0,0 +1,87 @@ |
|||||
|
#include "ft_printf.h" |
||||
|
|
||||
|
char *int_opts_transform(int n, char *nbr, t_opts *opts) |
||||
|
{ |
||||
|
if (opts->plus && n>=0) |
||||
|
nbr = ft_strjoin("+", nbr); |
||||
|
else if (opts->space && n>=0) |
||||
|
nbr = ft_strjoin(" ", nbr); |
||||
|
else if (opts->precision == 0 && opts->dot && n == 0 && |
||||
|
opts->len) |
||||
|
nbr = ft_strdup(""); |
||||
|
else |
||||
|
nbr = ft_strdup(nbr); |
||||
|
|
||||
|
if (opts->precision > 0) |
||||
|
nbr = ft_append(ft_zero_fill(nbr, '0', opts), nbr); |
||||
|
else if (opts->zero && !opts->dot) |
||||
|
nbr = ft_append(ft_zero_fill(nbr, '0', opts), nbr); |
||||
|
|
||||
|
return (nbr); |
||||
|
} |
||||
|
|
||||
|
char *uint_opts_transform(unsigned int n, char *nbr, t_opts *opts) |
||||
|
{ |
||||
|
if (opts->plus) |
||||
|
nbr = ft_strjoin("+", nbr); |
||||
|
else if (opts->space) |
||||
|
nbr = ft_strjoin(" ", nbr); |
||||
|
else if (opts->precision == 0 && opts->dot && n == 0 && |
||||
|
opts->len) |
||||
|
nbr = ft_strdup(""); |
||||
|
else |
||||
|
nbr = ft_strdup(nbr); |
||||
|
|
||||
|
if (opts->precision > 0) |
||||
|
nbr = ft_append(ft_zero_fill(nbr, '0', opts), nbr); |
||||
|
else if (opts->zero && !opts->dot) |
||||
|
nbr = ft_append(ft_zero_fill(nbr, '0', opts), nbr); |
||||
|
|
||||
|
return (nbr); |
||||
|
} |
||||
|
|
||||
|
char *ptr_opts_transform(char *nbr, t_opts *opts) |
||||
|
{ |
||||
|
if (opts->plus) |
||||
|
nbr = ft_strjoin("+", nbr); |
||||
|
else if (opts->space) |
||||
|
nbr = ft_strjoin(" ", nbr); |
||||
|
else if (opts->precision == 0 && opts->dot && |
||||
|
opts->len) |
||||
|
nbr = ft_strdup(""); |
||||
|
else |
||||
|
nbr = ft_strdup(nbr); |
||||
|
|
||||
|
if (opts->precision > 0) |
||||
|
nbr = ft_append(ft_zero_fill(nbr, '0', opts), nbr); |
||||
|
else if (opts->zero && !opts->dot) |
||||
|
nbr = ft_append(ft_zero_fill(nbr, '0', opts), nbr); |
||||
|
|
||||
|
return (nbr); |
||||
|
} |
||||
|
|
||||
|
char *str_opts_transform(char *str, t_opts *opts) |
||||
|
{ |
||||
|
int len; |
||||
|
char *tmp = NULL; |
||||
|
char *sub = NULL; |
||||
|
|
||||
|
if (opts->dot) |
||||
|
sub = ft_substr(str, 0, opts->precision); |
||||
|
if (sub) |
||||
|
str = sub; |
||||
|
len = opts->width - (int)ft_strlen(str); |
||||
|
tmp = ft_strnew(len, ' '); |
||||
|
if (!opts->minus && len > 0) |
||||
|
str = ft_strjoin(tmp, str); |
||||
|
else if (opts->minus && len > 0) |
||||
|
str = ft_strjoin(str, tmp); |
||||
|
else |
||||
|
str = ft_strdup(str); |
||||
|
if (tmp) |
||||
|
free(tmp); |
||||
|
if (sub) |
||||
|
free(sub); |
||||
|
|
||||
|
return (str); |
||||
|
} |
@ -0,0 +1,57 @@ |
|||||
|
#include "ft_printf.h" |
||||
|
|
||||
|
char *ft_strnew(int n, char c) |
||||
|
{ |
||||
|
char *str = NULL; |
||||
|
|
||||
|
if (n < 0) |
||||
|
return (NULL); |
||||
|
str = malloc(n + 1); |
||||
|
if (!str) |
||||
|
return (NULL); |
||||
|
str[n] = '\0'; |
||||
|
while (--n >= 0) |
||||
|
str[n] = c; |
||||
|
return (str); |
||||
|
} |
||||
|
|
||||
|
char *ft_zero_fill(char *nbr, char c, t_opts *opts) |
||||
|
{ |
||||
|
int len; |
||||
|
char *fill = NULL; |
||||
|
|
||||
|
if (opts->zero) |
||||
|
len = opts->width - ft_strlen(nbr); |
||||
|
else if (opts->dot) |
||||
|
len = opts->precision - ft_strlen(nbr); |
||||
|
else |
||||
|
return (NULL); |
||||
|
|
||||
|
if (len < 0 || (opts->zero && len == 0)) |
||||
|
return (NULL); |
||||
|
|
||||
|
if ((nbr[0] == '-' || nbr[0] == '+' || nbr[0] == ' ') && opts->dot) |
||||
|
fill = ft_strnew(len + 1, c); |
||||
|
else |
||||
|
fill = ft_strnew(len , c); |
||||
|
|
||||
|
if (nbr[0] == '-' || nbr[0] == '+' || nbr[0] == ' ') |
||||
|
{ |
||||
|
fill[0] = nbr[0]; |
||||
|
nbr[0] = '0'; |
||||
|
} |
||||
|
|
||||
|
return (fill); |
||||
|
} |
||||
|
|
||||
|
char *ft_append(char *s1, char *s2) { |
||||
|
char *ret = NULL; |
||||
|
if (!s1) |
||||
|
return (s2); |
||||
|
if (!s2) |
||||
|
return (s1); |
||||
|
ret = ft_strjoin(s1, s2); |
||||
|
free(s1); |
||||
|
free(s2); |
||||
|
return (ret); |
||||
|
} |
Loading…
Reference in new issue