diff --git a/ex00/ft_ntow.c b/ex00/ft_ntow.c index ed104b2..eb92d8b 100644 --- a/ex00/ft_ntow.c +++ b/ex00/ft_ntow.c @@ -6,7 +6,7 @@ /* By: tischmid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/04/02 20:26:44 by tischmid #+# #+# */ -/* Updated: 2023/04/02 23:34:29 by tischmid ### ########.fr */ +/* Updated: 2023/04/02 23:36:20 by tischmid ### ########.fr */ /* */ /* ************************************************************************** */ @@ -28,9 +28,8 @@ int num_to_words_free(char **triplets, char **parts, char *thousands_power) return (0); } -char *triplet_to_word(char *triplet, t_map_entry *map) +char *triplet_to_word(char *triplet, char *triplet_word, t_map_entry *map) { - char *triplet_word; int triplet_len; char *map_value; int idx; @@ -39,6 +38,51 @@ char *triplet_to_word(char *triplet, t_map_entry *map) char *digit_str; char *lookup_num; + triplet_len = ft_strlen(triplet); + idx = 0; + while (triplet_len--) + { + lookup_num = malloc(sizeof(char) * MAX_DIGITS); + digit = triplet[idx] - '0'; + positional_value = power(10, triplet_len) * digit; + ft_itoa(lookup_num, positional_value); + digit_str = malloc(sizeof(char) * 2); + ft_itoa(digit_str, digit); + map_value = ll_map_get_value(map, digit_str); + free(digit_str); + if (map_value == NULL) + { + free(lookup_num); + return (ft_strcpy(triplet_word, "MISSING_KEY")); + } + if (triplet_len == 2) + map_value = ll_map_get_value(map, "100"); + else + map_value = ll_map_get_value(map, lookup_num); + free(lookup_num); + if (map_value == NULL) + return (ft_strcpy(triplet_word, "MISSING_KEY")); + if (triplet_len == 2) + { + digit_str = malloc(sizeof(char) * 2); + ft_itoa(digit_str, digit); + ft_strcat(triplet_word, ll_map_get_value(map, digit_str)); + ft_strcat(triplet_word, " "); + free(digit_str); + } + ft_strcat(triplet_word, map_value); + if (triplet_len != 0) + ft_strcat(triplet_word, " "); + ++idx; + } + return (triplet_word); +} + +char *t_to_w_wrapper(char *triplet, t_map_entry *map) +{ + char *map_value; + char *triplet_word; + triplet_word = malloc(sizeof(char) * MAX_LINE_LENGTH * 5); ft_strcpy(triplet_word, ""); if (ft_atoi(triplet) < 20) @@ -50,46 +94,7 @@ char *triplet_to_word(char *triplet, t_map_entry *map) return (triplet_word); } else - { - triplet_len = ft_strlen(triplet); - idx = 0; - while (triplet_len--) - { - lookup_num = malloc(sizeof(char) * MAX_DIGITS); - digit = triplet[idx] - '0'; - positional_value = power(10, triplet_len) * digit; - ft_itoa(lookup_num, positional_value); - digit_str = malloc(sizeof(char) * 2); - ft_itoa(digit_str, digit); - map_value = ll_map_get_value(map, digit_str); - free(digit_str); - if (map_value == NULL) - { - free(lookup_num); - return (ft_strcpy(triplet_word, "MISSING_KEY")); - } - if (triplet_len == 2) - map_value = ll_map_get_value(map, "100"); - else - map_value = ll_map_get_value(map, lookup_num); - free(lookup_num); - if (map_value == NULL) - return (ft_strcpy(triplet_word, "MISSING_KEY")); - if (triplet_len == 2) - { - digit_str = malloc(sizeof(char) * 2); - ft_itoa(digit_str, digit); - ft_strcat(triplet_word, ll_map_get_value(map, digit_str)); - ft_strcat(triplet_word, " "); - free(digit_str); - } - ft_strcat(triplet_word, map_value); - if (triplet_len != 0) - ft_strcat(triplet_word, " "); - ++idx; - } - } - return (triplet_word); + return (triplet_to_word(triplet, triplet_word, map)); } int set_parts(char **parts, char **triplets, char *k_power, t_map_entry *map) @@ -107,7 +112,7 @@ int set_parts(char **parts, char **triplets, char *k_power, t_map_entry *map) thousands_power_word = ll_map_get_value(map, k_power); if (!thousands_power_word) return (num_to_words_free(triplets, parts, k_power)); - triplet_word = triplet_to_word(triplets[idx], map); + triplet_word = t_to_w_wrapper(triplets[idx], map); if (!ft_strcmp(triplet_word, "MISSING_KEY")) return (num_to_words_free(triplets, parts, k_power)); parts[idx] = malloc(sizeof(char) * MAX_LINE_LENGTH * 6);