aboutsummaryrefslogtreecommitdiff
path: root/c07
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2019-07-10 06:41:44 +0200
committerCharles <sircharlesaze@gmail.com>2019-07-10 06:41:44 +0200
commitc2bf9fcefbb4453cee271ccd1af9674ad2f3a181 (patch)
tree9c8ea6e70b228ca843d6a15d78d032d215413c4a /c07
parente0b1620a22c5fcd673ab78c4d8ce2c649a2cc2fc (diff)
downloadpiscine-c2bf9fcefbb4453cee271ccd1af9674ad2f3a181.tar.gz
piscine-c2bf9fcefbb4453cee271ccd1af9674ad2f3a181.tar.bz2
piscine-c2bf9fcefbb4453cee271ccd1af9674ad2f3a181.zip
c12 start
Diffstat (limited to 'c07')
-rw-r--r--c07/ex04/ft_convert_base.c106
-rw-r--r--c07/ex05/ft_split.c55
-rw-r--r--c07/main.c30
3 files changed, 144 insertions, 47 deletions
diff --git a/c07/ex04/ft_convert_base.c b/c07/ex04/ft_convert_base.c
index f50289a..f30c3e5 100644
--- a/c07/ex04/ft_convert_base.c
+++ b/c07/ex04/ft_convert_base.c
@@ -6,7 +6,7 @@
/* By: cacharle <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/07/08 16:16:53 by cacharle #+# #+# */
-/* Updated: 2019/07/09 09:05:47 by cacharle ### ########.fr */
+/* Updated: 2019/07/10 06:37:09 by cacharle ### ########.fr */
/* */
/* ************************************************************************** */
@@ -46,20 +46,106 @@ int ft_pow(int base, int exponent)
return (accumulator);
}
-int ft_atoi_base(char *nbr, char *base)
+
+int position_in_base(char digit, char *base)
{
+ int i;
+ i = 0;
+ while (base[i] != digit)
+ i++;
+ return (i);
+}
+
+// CHECK THE STR NOT JUST THE BASE (you idiot)
+int ft_atoi_base(char *str, char *base)
+{
+ int radix;
+ int i;
+ int j;
+ int nb;
+
+ if (!check_base(base))
+ return (0);
+ nb = 0;
+ radix = 0;
+ while (base[radix])
+ radix++;
+ i = 0;
+ while (str[i])
+ 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);
+}
+
+char *to_base(int nbr, char *base)
+{
+ int radix;
+ int i;
+ 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;
+ nbu = -nbr;
+ }
+ i = 0;
+ printf("%d %s %d\n", radix, base, nbr);
+ while (nbu > 0)
+ {
+ printf("%u\n", nbu % radix);
+ rev_digits[i] = base[nbu % radix];
+ nbu /= radix;
+ i++;
+ }
+ 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];
+ 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;
- char *converted_to
-
- if (!check_base(base_from) || !check_base(base_to))
- return (NULL);
- converted_nb = ft_atoi_base(nbr, base_from);
- printf("%d\n", convert_nb);
- /*converted_to = ft_itoa_base(converted_nb, base_to);*/
- /*return (converted_to);*/
+
+ int nb;
+ return NULL;
+
}
diff --git a/c07/ex05/ft_split.c b/c07/ex05/ft_split.c
index da2d7fc..956782f 100644
--- a/c07/ex05/ft_split.c
+++ b/c07/ex05/ft_split.c
@@ -6,44 +6,59 @@
/* By: cacharle <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2019/07/08 15:58:03 by cacharle #+# #+# */
-/* Updated: 2019/07/09 09:40:49 by cacharle ### ########.fr */
+/* Updated: 2019/07/09 12:42:21 by cacharle ### ########.fr */
/* */
/* ************************************************************************** */
#include <stdlib.h>
+int in_charset(char character, char *charset)
+{
+ while (*charset)
+ if (character == *charset++)
+ return (1);
+ return (0);
+}
+
int count_segment(char *str, char *charset)
{
int counter;
- int i;
- counter = 0;
+ counter = 1;
while (*str)
{
- i = 0;
- while (charset[i])
- if (str++ == charset[i++])
- counter++;
+ if (in_charset(*str, charset))
+ counter++;
str++;
}
return (counter);
}
-int strlen_until_sep(char *str, char *charset)
-{
-
-}
-
-char **ft_split(char *str, char *charset)
+char **ft_split(char *str, char *charset)
{
- char **strs;
+ char **strs;
+ char *tmp;
+ int i;
+ int j;
+ int k;
- strs = (char**)malloc(sizeof(char*) * count_segment(str, charset));
+ strs = (char**)malloc(sizeof(char*) * (count_segment(str, charset) + 1));
printf("%d\n", count_segment(str, charset));
- /*while (*str)*/
- /*{*/
-
- /*str++;*/
- /*}*/
+ k = 0;
+ while (*str)
+ {
+ i = 0;
+ while (!in_charset(str[i], charset))
+ i++;
+ tmp = (char*)malloc(sizeof(char) * i);
+ if (tmp == NULL)
+ printf("bonjour");
+ i = 0;
+ while (!in_charset(*str, charset))
+ tmp[i++] = *str++;
+ strs[k++] = tmp;
+ str++;
+ }
+ strs[k] = 0;
return (strs);
}
diff --git a/c07/main.c b/c07/main.c
index 477a0b7..729720b 100644
--- a/c07/main.c
+++ b/c07/main.c
@@ -1,15 +1,3 @@
-/* ************************************************************************** */
-/* */
-/* ::: :::::::: */
-/* main.c :+: :+: :+: */
-/* +:+ +:+ +:+ */
-/* By: cacharle <charles.cabergs@gmail.com> +#+ +:+ +#+ */
-/* +#+#+#+#+#+ +#+ */
-/* Created: 2019/07/08 08:19:02 by cacharle #+# #+# */
-/* Updated: 2019/07/09 09:42:11 by cacharle ### ########.fr */
-/* */
-/* ************************************************************************** */
-
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -17,7 +5,7 @@
#include "ex01/ft_range.c"
#include "ex02/ft_ultimate_range.c"
#include "ex03/ft_strjoin.c"
-/*#include "ex04/ft_strdup.c"*/
+#include "ex04/ft_convert_base.c"
#include "ex05/ft_split.c"
int main()
@@ -59,10 +47,18 @@ int main()
free(join);
printf("\n---------------\n");
- char *str = "bon,je,suis,charles";
- char *charset = ",";
- char **sstrs = ft_split(str, charset);
- free(sstrs);
+ printf("%s\n", ft_convert_base("101010", "01", "0123456789"));
+ printf("%s\n", to_base(34, "10"));
+
+ /*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);*/
return 0;
}