diff options
| author | Charles <sircharlesaze@gmail.com> | 2019-07-15 08:15:37 +0200 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2019-07-15 08:15:37 +0200 |
| commit | 3b9a1d7dcc5683b962f2bf24795e80e1c449cd1f (patch) | |
| tree | 25b02c02f5140dbefbabd7720f292d8be3d5cc51 /c07 | |
| parent | c2bf9fcefbb4453cee271ccd1af9674ad2f3a181 (diff) | |
| download | piscine-3b9a1d7dcc5683b962f2bf24795e80e1c449cd1f.tar.gz piscine-3b9a1d7dcc5683b962f2bf24795e80e1c449cd1f.tar.bz2 piscine-3b9a1d7dcc5683b962f2bf24795e80e1c449cd1f.zip | |
c07 passed, c08 in progress, rush01(+ 6x6 try)
Diffstat (limited to 'c07')
| -rw-r--r-- | c07/ex03/ft_strjoin.c | 37 | ||||
| -rw-r--r-- | c07/ex04/ft_convert_base.c | 130 | ||||
| -rw-r--r-- | c07/ex04/ft_convert_base2.c | 69 | ||||
| -rw-r--r-- | c07/ex05/ft_split.c | 46 | ||||
| -rw-r--r-- | c07/main.c | 56 |
5 files changed, 187 insertions, 151 deletions
diff --git a/c07/ex03/ft_strjoin.c b/c07/ex03/ft_strjoin.c index ea97bb6..7801820 100644 --- a/c07/ex03/ft_strjoin.c +++ b/c07/ex03/ft_strjoin.c @@ -6,7 +6,7 @@ /* By: cacharle <charles.cabergs@gmail.com> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/07/07 16:14:25 by cacharle #+# #+# */ -/* Updated: 2019/07/09 09:08:52 by cacharle ### ########.fr */ +/* Updated: 2019/07/12 14:41:33 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -24,16 +24,11 @@ int my_strlen(char *str) int cummulative_strlen(int size, char **strs) { - int i; int len; len = 0; - i = 0; - while (size > 0) - { - len += my_strlen(strs[size - 1]); - size--; - } + while (size-- > 0) + len += my_strlen(strs[size]); return (len); } @@ -42,26 +37,24 @@ char *ft_strjoin(int size, char **strs, char *sep) int i; int j; int k; - int l; char *join; join = (char*)malloc(sizeof(char) * (cummulative_strlen(size, strs) - + my_strlen(sep) * (size - 1) + 1)); + + my_strlen(sep) * (size - (size == 0 ? 0 : 1) + 1))); + if (join == NULL) + return (NULL); j = 0; - l = 0; - while (l < size) + k = 0; + while (k < size) { i = 0; - while (strs[l][i]) - { - join[j] = strs[l][i]; - i++; - j++; - } - k = 0; - while (l != size - 1 && sep[k]) - join[j++] = sep[k++]; - l++; + while (strs[k][i]) + join[j++] = strs[k][i++]; + i = 0; + while (k != size - 1 && sep[i]) + join[j++] = sep[i++]; + k++; } + join[j] = '\0'; return (join); } diff --git a/c07/ex04/ft_convert_base.c b/c07/ex04/ft_convert_base.c index f30c3e5..0abdbe8 100644 --- a/c07/ex04/ft_convert_base.c +++ b/c07/ex04/ft_convert_base.c @@ -6,118 +6,60 @@ /* By: cacharle <charles.cabergs@gmail.com> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/07/08 16:16:53 by cacharle #+# #+# */ -/* Updated: 2019/07/10 06:37:09 by cacharle ### ########.fr */ +/* Updated: 2019/07/12 12:07:28 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ -int check_base(char *base) -{ - int i; - int j; - - i = 0; - while (base[i]) - { - if (base[i] == '-' || base[i] == '+' || base[i] == ' ' - || base[i] == '\t' || base[i] == '\n' || base[i] == '\v' - || base[i] == '\f' || base[i] == '\r') - return (0); - j = 0; - while (base[j]) - { - if (j != i && base[j] == base[i]) - return (0); - j++; - } - i++; - } - if (i < 2) - return (0); - return (1); -} - -int ft_pow(int base, int exponent) -{ - int accumulator; - - accumulator = 1; - while (exponent-- > 0) - accumulator *= base; - return (accumulator); -} - - -int position_in_base(char digit, char *base) -{ - int i; +#include <stdlib.h> - i = 0; - while (base[i] != digit) - i++; - return (i); -} +int check_base(char *base); +int ft_pow(int base, int exponent); +int position_in_base(char digit, char *base); +int some_strlen(char *str); -// CHECK THE STR NOT JUST THE BASE (you idiot) -int ft_atoi_base(char *str, char *base) +int from_base(char *str, char *base) { int radix; int i; int j; int nb; + int is_negative; - if (!check_base(base)) - return (0); + while (*str == ' ' || *str == '\t' || *str == '\n' + || *str == '\v' || *str == '\f' || *str == '\r') + str++; + is_negative = 0; + while (*str == '-' || *str == '+') + if (*str++ == '-') + is_negative = !is_negative; nb = 0; radix = 0; while (base[radix]) radix++; i = 0; - while (str[i]) + while (position_in_base(str[i], base) != -1) i++; j = 0; while (--i >= 0) - { - nb += ft_pow(radix, i) * position_in_base(str[j], base); - j++; - } - return (nb); -} - -int some_strlen(char *str) -{ - int counter; - - counter = 0; - while (str[counter]) - counter++; - return (counter); + nb += ft_pow(radix, i) * position_in_base(str[j++], base); + return (is_negative ? -nb : nb); } -char *to_base(int nbr, char *base) +char *to_base(int nbr, char *base, int radix, int is_negative) { - int radix; int i; + int j; unsigned int nbu; char rev_digits[1024]; char *ret; - int j; - int is_negative; - /*if (!check_base(base))*/ - /*return (NULL);*/ - radix = some_strlen(base); nbu = nbr; - is_negative = 0; - if (nbr < 0) - { - is_negative = 1; + if (is_negative) nbu = -nbr; - } - i = 0; - printf("%d %s %d\n", radix, base, nbr); + i = nbu == 0 ? 1 : 0; + rev_digits[0] = base[0]; while (nbu > 0) { - printf("%u\n", nbu % radix); rev_digits[i] = base[nbu % radix]; nbu /= radix; i++; @@ -125,27 +67,21 @@ char *to_base(int nbr, char *base) ret = malloc(sizeof(char) * i + (is_negative ? 1 : 0)); j = 0; if (is_negative) - { ret[0] = '-'; - j++; - } - while (i-- > 0) - ret[j++] = rev_digits[i]; + while (i-- + (is_negative ? 1 : 0) > 0) + ret[j++ + (is_negative ? 1 : 0)] = rev_digits[i]; ret[j] = '\0'; - for (int i = 0; i < 4; i++) - printf("%c ", rev_digits[i]); - printf("\n"); - for (int i = 0; i < 4; i++) - printf("%c ", ret[i]); - printf("\n"); return (ret); } char *ft_convert_base(char *nbr, char *base_from, char *base_to) { - int converted_nb; - - int nb; - return NULL; - + int nb; + char *parsed_nbr; + + if (!check_base(base_from) || !check_base(base_to)) + return (NULL); + parsed_nbr = nbr; + nb = from_base(parsed_nbr, base_from); + return (to_base(nb, base_to, some_strlen(base_to), nb < 0)); } diff --git a/c07/ex04/ft_convert_base2.c b/c07/ex04/ft_convert_base2.c index e69de29..be9a03e 100644 --- a/c07/ex04/ft_convert_base2.c +++ b/c07/ex04/ft_convert_base2.c @@ -0,0 +1,69 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_convert_base2.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: cacharle <charles.cabergs@gmail.com> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/07/10 20:22:09 by cacharle #+# #+# */ +/* Updated: 2019/07/11 10:10:08 by cacharle ### ########.fr */ +/* */ +/* ************************************************************************** */ + +int check_base(char *base) +{ + int i; + int j; + + i = 0; + while (base[i]) + { + if (base[i] == '-' || base[i] == '+' || base[i] == ' ' + || base[i] == '\t' || base[i] == '\n' || base[i] == '\v' + || base[i] == '\f' || base[i] == '\r') + return (0); + j = 0; + while (base[j]) + { + if (j != i && base[j] == base[i]) + return (0); + j++; + } + i++; + } + if (i < 2) + return (0); + return (1); +} + +int ft_pow(int base, int exponent) +{ + int accumulator; + + accumulator = 1; + while (exponent-- > 0) + accumulator *= base; + return (accumulator); +} + +int position_in_base(char digit, char *base) +{ + int i; + + i = 0; + while (digit != base[i] && base[i]) + i++; + if (base[i] == '\0') + return (-1); + return (i); +} + +int some_strlen(char *str) +{ + int counter; + + counter = 0; + while (str[counter]) + counter++; + return (counter); +} diff --git a/c07/ex05/ft_split.c b/c07/ex05/ft_split.c index 956782f..3ff2e43 100644 --- a/c07/ex05/ft_split.c +++ b/c07/ex05/ft_split.c @@ -6,7 +6,7 @@ /* By: cacharle <charles.cabergs@gmail.com> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/07/08 15:58:03 by cacharle #+# #+# */ -/* Updated: 2019/07/09 12:42:21 by cacharle ### ########.fr */ +/* Updated: 2019/07/13 08:15:31 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -24,41 +24,51 @@ int count_segment(char *str, char *charset) { int counter; - counter = 1; + counter = 0; while (*str) { - if (in_charset(*str, charset)) + if (!in_charset(*str, charset)) + { counter++; + while (!in_charset(*str, charset) && *str) + str++; + if (!*str) + break ; + } str++; } return (counter); } -char **ft_split(char *str, char *charset) +char **heck(char *str, char *charset, char *tmp, int i) { char **strs; - char *tmp; - int i; int j; - int k; - strs = (char**)malloc(sizeof(char*) * (count_segment(str, charset) + 1)); - printf("%d\n", count_segment(str, charset)); - k = 0; + if ((strs = (char**)malloc(sizeof(char*) + * (count_segment(str, charset) + 1))) == NULL) + return (NULL); + j = 0; while (*str) { + while (in_charset(*str, charset)) + str++; i = 0; - while (!in_charset(str[i], charset)) + while (!in_charset(str[i], charset) && str[i]) i++; - tmp = (char*)malloc(sizeof(char) * i); - if (tmp == NULL) - printf("bonjour"); + if ((tmp = (char*)malloc(sizeof(char) * i + 1)) == NULL) + return (NULL); i = 0; - while (!in_charset(*str, charset)) + while (!in_charset(*str, charset) && *str) tmp[i++] = *str++; - strs[k++] = tmp; - str++; + tmp[i] = '\0'; + strs[j++] = tmp; } - strs[k] = 0; + strs[j] = 0; return (strs); } + +char **ft_split(char *str, char *charset) +{ + return (heck(str, charset, NULL, 0)); +} @@ -6,6 +6,7 @@ #include "ex02/ft_ultimate_range.c" #include "ex03/ft_strjoin.c" #include "ex04/ft_convert_base.c" +#include "ex04/ft_convert_base2.c" #include "ex05/ft_split.c" int main() @@ -37,28 +38,55 @@ int main() printf("---------------\n"); char *strs[] = {"bon", "je", "suis", "charles"}; - char *sep = ", "; + char *sep = "%&^"; int size = 4; char *join; join = ft_strjoin(size, strs, sep); printf("[%d] %s\n", my_strlen(join), join); - /*for (int i = 0; i < my_strlen(join) + 1; i++)*/ - /*printf("%d ", join[i]);*/ + for (int i = 0; i < my_strlen(join) + 1; i++) + printf("%d ", join[i]); free(join); printf("\n---------------\n"); - printf("%s\n", ft_convert_base("101010", "01", "0123456789")); - printf("%s\n", to_base(34, "10")); + char *converted; + converted = ft_convert_base("-101010", "01", "0123456789"); + printf("%s\n", converted); + free(converted); + converted = ft_convert_base(" -+1010102345678ff", "01", "0123456789abcdef"); + printf("%s\n", converted); + free(converted); + converted = ft_convert_base(" \t\f\v +34589qw", "01234567", "012"); + printf("%s\n", converted); + free(converted); + converted = ft_convert_base(" \t\f\v +asdf", "fgh", ".?"); + printf("%s\n", converted); + free(converted); + printf("%s\n", ft_convert_base(" \t\f\v +34589qw", "01234567", "0+12")); + printf("%s\n", ft_convert_base(" \t\f\v +34589qw", "01234567", "012 ")); + printf("%s\n", ft_convert_base(" \t\f\v +34589qw", "012345-67", "012")); + printf("%s\n", ft_convert_base(" \t\f\v +34589qw", "012\t34567", "012")); + printf("%s\n", ft_convert_base(" \t\f\v +34589qw", "0", "012")); + printf("%s\n", ft_convert_base(" \t\f\v +34589qw", "01", "")); + printf("%s\n", ft_convert_base(" \t\f\v +34w", "01", "0123456789")); + printf("%s\n", ft_convert_base(" \t\f\v +34w", "01", "!?")); - /*printf("\n---------------\n");*/ - /*char *str = "bon.je.suis,asdofoisafj.ladjsf";*/ - /*char *charset = "";*/ - /*char **sstrs = ft_split(str, charset);*/ - /*for (int i = 0; sstrs[i] != 0; i++)*/ - /*printf("%s\n", sstrs[i]);*/ - /*for (int i = 0; sstrs[i] != 0; i++)*/ - /*free(sstrs[i]);*/ - /*free(sstrs);*/ + printf("\n---------------\n"); + char *const str = "3YaZkAP30iGoBWv L asdf h LbpX8Hx FWHwB2u1FH0S5"; + char *begin = "\n \t hgonjour"; + char *end = "jesuis\n\t hhh"; + char *empty = ""; + char *charset = "\n\t "; + char **sstrs = ft_split(begin, charset); + for (int i = 0; i < count_segment(begin, charset) + 1; i++) + { + printf("\n%s: ", sstrs[i]); + /*for (int j = 0; j < 10; j++)*/ + /*printf("%d ", sstrs[i][j]);*/ + } + if (sstrs) + for (int i = 0; sstrs[i] != 0; i++) + free(sstrs[i]); + free(sstrs); return 0; } |
