From 1aaf2c6bacde4b9cafdd29229c48e56ce6bdb9f7 Mon Sep 17 00:00:00 2001 From: Harpreet Singh Date: Wed, 23 Feb 2022 21:29:54 +0530 Subject: [PATCH 1/5] week3 --- courses/cunix2/libft/libft.a | Bin 0 -> 35018 bytes courses/cunix2/libft/libft.h | 29 ++++++++++++++ courses/cunix2/libft/src/ft_abs.c | 4 ++ courses/cunix2/libft/src/ft_bzero.c | 11 ++++++ courses/cunix2/libft/src/ft_div.c | 12 ++++++ courses/cunix2/libft/src/ft_isalpha.c | 4 ++ courses/cunix2/libft/src/ft_isascii.c | 5 +++ courses/cunix2/libft/src/ft_isdigit.c | 4 ++ courses/cunix2/libft/src/ft_memcmp.c | 20 ++++++++++ courses/cunix2/libft/src/ft_memcpy.c | 15 ++++++++ courses/cunix2/libft/src/ft_memset.c | 13 +++++++ courses/cunix2/libft/src/ft_strchr.c | 18 +++++++++ courses/cunix2/libft/src/ft_strclen.c | 13 +++++++ courses/cunix2/libft/src/ft_striter.c | 8 ++++ courses/cunix2/libft/src/ft_strjoin.c | 30 +++++++++++++++ courses/cunix2/libft/src/ft_strlen.c | 13 +++++++ courses/cunix2/libft/src/ft_strncmp.c | 21 +++++++++++ courses/cunix2/libft/src/ft_strnstr.c | 43 +++++++++++++++++++++ courses/cunix2/libft/src/ft_strsplit.c | 38 +++++++++++++++++++ courses/cunix2/libft/src/ft_strstr.c | 44 ++++++++++++++++++++++ courses/cunix2/libft/src/ft_strtrim.c | 50 +++++++++++++++++++++++++ courses/cunix2/libft/src/ft_tolower.c | 9 +++++ courses/cunix2/libft/src/ft_toupper.c | 9 +++++ courses/cunix2/libft/src/ft_words.c | 25 +++++++++++++ 24 files changed, 438 insertions(+) create mode 100644 courses/cunix2/libft/libft.a create mode 100644 courses/cunix2/libft/libft.h create mode 100644 courses/cunix2/libft/src/ft_abs.c create mode 100644 courses/cunix2/libft/src/ft_bzero.c create mode 100644 courses/cunix2/libft/src/ft_div.c create mode 100644 courses/cunix2/libft/src/ft_isalpha.c create mode 100644 courses/cunix2/libft/src/ft_isascii.c create mode 100644 courses/cunix2/libft/src/ft_isdigit.c create mode 100644 courses/cunix2/libft/src/ft_memcmp.c create mode 100644 courses/cunix2/libft/src/ft_memcpy.c create mode 100644 courses/cunix2/libft/src/ft_memset.c create mode 100644 courses/cunix2/libft/src/ft_strchr.c create mode 100644 courses/cunix2/libft/src/ft_strclen.c create mode 100644 courses/cunix2/libft/src/ft_striter.c create mode 100644 courses/cunix2/libft/src/ft_strjoin.c create mode 100644 courses/cunix2/libft/src/ft_strlen.c create mode 100644 courses/cunix2/libft/src/ft_strncmp.c create mode 100644 courses/cunix2/libft/src/ft_strnstr.c create mode 100644 courses/cunix2/libft/src/ft_strsplit.c create mode 100644 courses/cunix2/libft/src/ft_strstr.c create mode 100644 courses/cunix2/libft/src/ft_strtrim.c create mode 100644 courses/cunix2/libft/src/ft_tolower.c create mode 100644 courses/cunix2/libft/src/ft_toupper.c create mode 100644 courses/cunix2/libft/src/ft_words.c diff --git a/courses/cunix2/libft/libft.a b/courses/cunix2/libft/libft.a new file mode 100644 index 0000000000000000000000000000000000000000..7e8ec67b57a584d43bac26184db85a27b54c55d2 GIT binary patch literal 35018 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 literal 0 HcmV?d00001 diff --git a/courses/cunix2/libft/libft.h b/courses/cunix2/libft/libft.h new file mode 100644 index 00000000..9aa5242f --- /dev/null +++ b/courses/cunix2/libft/libft.h @@ -0,0 +1,29 @@ +#ifndef LIBFT_H +#define LIBFT_H +#include +#include + +void ft_bzero(void *s, size_t n); +char *ft_strdup(const char *s); +char *ft_strchr(const char *s, int c); +int ft_isalpha(int c); +int ft_isdigit(int c); +int ft_isascii(int c); +int ft_toupper(int c); +int ft_tolower(int c); +int ft_abs(int j); +div_t ft_div(int num, int denom); +void *ft_memcpy(void *__restrict__ dest, const void *__restrict__ src, size_t n); +int ft_memcmp(const void *s1, const void *s2, size_t n); +char *ft_strnstr(const char *haystack, const char *needle, size_t n); +int ft_strncmp(const char *s1, const char *s2, size_t n); +char *ft_strjoin(char const *s1, char const *s2); +size_t ft_strlen(const char *s); +char *ft_strtrim(char const *s); +char **ft_strsplit(char const *s, char c); +unsigned int ft_words(const char *s, char c); +size_t ft_strclen(const char *s, char c); +void ft_striter(char *s, void (*f)(char *)); +void *ft_memset(void *s, int c, size_t n); +char *ft_strstr(const char *haystack, const char *needle); +#endif diff --git a/courses/cunix2/libft/src/ft_abs.c b/courses/cunix2/libft/src/ft_abs.c new file mode 100644 index 00000000..22c0072b --- /dev/null +++ b/courses/cunix2/libft/src/ft_abs.c @@ -0,0 +1,4 @@ +int ft_abs(int j) +{ + return (j < 0 ? -j : j); +} diff --git a/courses/cunix2/libft/src/ft_bzero.c b/courses/cunix2/libft/src/ft_bzero.c new file mode 100644 index 00000000..56eb1037 --- /dev/null +++ b/courses/cunix2/libft/src/ft_bzero.c @@ -0,0 +1,11 @@ +#include + +void ft_bzero(void *s, size_t n) +{ + char *data = (char *) s; + + while (n-- != 0) + { + *data++ = '\0'; + } +} diff --git a/courses/cunix2/libft/src/ft_div.c b/courses/cunix2/libft/src/ft_div.c new file mode 100644 index 00000000..59bc2599 --- /dev/null +++ b/courses/cunix2/libft/src/ft_div.c @@ -0,0 +1,12 @@ +#include + +div_t ft_div(int numerator, int denominator) +{ + div_t res = + { + numerator / denominator, + numerator % denominator + }; + + return res; +} diff --git a/courses/cunix2/libft/src/ft_isalpha.c b/courses/cunix2/libft/src/ft_isalpha.c new file mode 100644 index 00000000..70d758c0 --- /dev/null +++ b/courses/cunix2/libft/src/ft_isalpha.c @@ -0,0 +1,4 @@ +int ft_isalpha(int c) +{ + return (('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z')); +} diff --git a/courses/cunix2/libft/src/ft_isascii.c b/courses/cunix2/libft/src/ft_isascii.c new file mode 100644 index 00000000..be2ec45f --- /dev/null +++ b/courses/cunix2/libft/src/ft_isascii.c @@ -0,0 +1,5 @@ + +int ft_isascii(int c) +{ + return (0 <= c && c <= 127); +} diff --git a/courses/cunix2/libft/src/ft_isdigit.c b/courses/cunix2/libft/src/ft_isdigit.c new file mode 100644 index 00000000..a715d72b --- /dev/null +++ b/courses/cunix2/libft/src/ft_isdigit.c @@ -0,0 +1,4 @@ +int ft_isdigit(int c) +{ + return ('0' <= c && c <= '9'); +} diff --git a/courses/cunix2/libft/src/ft_memcmp.c b/courses/cunix2/libft/src/ft_memcmp.c new file mode 100644 index 00000000..f2ac3013 --- /dev/null +++ b/courses/cunix2/libft/src/ft_memcmp.c @@ -0,0 +1,20 @@ +#include + +int ft_memcmp(const void *s1, const void *s2, size_t n) +{ + unsigned char *s1_pos = (unsigned char *) s1; + unsigned char *s2_pos = (unsigned char *) s2; + int diff; + + while (n-- != 0) + { + diff = *s1_pos++ - *s2_pos++; + + if (diff != 0) + { + return diff; + } + } + + return 0; +} diff --git a/courses/cunix2/libft/src/ft_memcpy.c b/courses/cunix2/libft/src/ft_memcpy.c new file mode 100644 index 00000000..185b5fc2 --- /dev/null +++ b/courses/cunix2/libft/src/ft_memcpy.c @@ -0,0 +1,15 @@ +#include +#include + +void *ft_memcpy(void *restrict dest, const void *restrict src, size_t n) +{ + unsigned char *dest_pos = (unsigned char *) dest; + unsigned char *src_pos = (unsigned char *) src; + + while (n-- != 0) + { + *dest_pos++ = *src_pos++; + } + + return dest; +} diff --git a/courses/cunix2/libft/src/ft_memset.c b/courses/cunix2/libft/src/ft_memset.c new file mode 100644 index 00000000..4459ed41 --- /dev/null +++ b/courses/cunix2/libft/src/ft_memset.c @@ -0,0 +1,13 @@ +#include + +void *ft_memset(void *s, int c, size_t n) +{ + unsigned char *pos = (unsigned char *) s; + + while (n-- != 0) + { + *pos++ = (unsigned char) c; + } + + return s; +} diff --git a/courses/cunix2/libft/src/ft_strchr.c b/courses/cunix2/libft/src/ft_strchr.c new file mode 100644 index 00000000..44df26f0 --- /dev/null +++ b/courses/cunix2/libft/src/ft_strchr.c @@ -0,0 +1,18 @@ +#include + +char *ft_strchr(const char *s, int c) +{ + c %= 256; + + while (*s != '\0') + { + if (*s == c) + { + return (char *) s; + } + + s++; + } + + return (*s == c) ? (char *) s : 0; +} diff --git a/courses/cunix2/libft/src/ft_strclen.c b/courses/cunix2/libft/src/ft_strclen.c new file mode 100644 index 00000000..aec8a6a7 --- /dev/null +++ b/courses/cunix2/libft/src/ft_strclen.c @@ -0,0 +1,13 @@ +#include "../libft.h" + +size_t ft_strclen(const char *s, char c) +{ + char *word_end = ft_strchr(s, c); + + if (!word_end) + { + return ft_strlen(s); + } + + return word_end - s; +} diff --git a/courses/cunix2/libft/src/ft_striter.c b/courses/cunix2/libft/src/ft_striter.c new file mode 100644 index 00000000..755860b0 --- /dev/null +++ b/courses/cunix2/libft/src/ft_striter.c @@ -0,0 +1,8 @@ +void ft_striter(char *s, void (*f)(char *)) +{ + while (*s != '\0') + { + f(s); + s++; + } +} diff --git a/courses/cunix2/libft/src/ft_strjoin.c b/courses/cunix2/libft/src/ft_strjoin.c new file mode 100644 index 00000000..138c5d2e --- /dev/null +++ b/courses/cunix2/libft/src/ft_strjoin.c @@ -0,0 +1,30 @@ +#include +#include "../libft.h" + +char *ft_strjoin(const char *s1, const char *s2) +{ + size_t l1 = ft_strlen(s1); + size_t l2 = ft_strlen(s2); + size_t concat_l = l1 + l2; + + char *concat = (char *) malloc(sizeof(char) * (concat_l + 1)); + + if (!concat) + { + return 0; + } + + while (l1-- != 0) + { + *concat++ = *s1++; + } + + while (l2-- != 0) + { + *concat++ = *s2++; + } + + *concat = '\0'; + + return concat - concat_l; +} diff --git a/courses/cunix2/libft/src/ft_strlen.c b/courses/cunix2/libft/src/ft_strlen.c new file mode 100644 index 00000000..ad524cc4 --- /dev/null +++ b/courses/cunix2/libft/src/ft_strlen.c @@ -0,0 +1,13 @@ +#include + +size_t ft_strlen(const char *s) +{ + size_t len = 0; + + while (*s++ != '\0') + { + len++; + } + + return len; +} diff --git a/courses/cunix2/libft/src/ft_strncmp.c b/courses/cunix2/libft/src/ft_strncmp.c new file mode 100644 index 00000000..dbf05485 --- /dev/null +++ b/courses/cunix2/libft/src/ft_strncmp.c @@ -0,0 +1,21 @@ +#include + +int ft_strncmp(const char *s1, const char *s2, size_t n) +{ + for (size_t i = 0; i < n; i++) + { + if (*s1 != '\0' && *s2 != '\0') + { + return 0; + } + + if (*s1 != *s2) + { + return (int) * s1 - (int) * s2; + } + s1++; + s2++; + } + + return 0; +} diff --git a/courses/cunix2/libft/src/ft_strnstr.c b/courses/cunix2/libft/src/ft_strnstr.c new file mode 100644 index 00000000..c2592d22 --- /dev/null +++ b/courses/cunix2/libft/src/ft_strnstr.c @@ -0,0 +1,43 @@ +#include + +char *ft_strnstr(const char *haystack, const char *needle, size_t n) +{ + if (*needle == '\0') + { + return (char *) haystack; + } + + char *h_pos; + char *n_pos; + char *end_pos = (char *)(haystack + n); + int found = 0; + + while (*haystack != '\0' && haystack != end_pos) + { + h_pos = (char *) haystack; + n_pos = (char *) needle; + + while (*n_pos != '\0') + { + if (h_pos != end_pos && *h_pos++ == *n_pos++) + { + found = 1; + } + else + { + found = 0; + break; + } + + } + + if (found) + { + return (char *) haystack; + } + + haystack++; + } + + return 0; +} diff --git a/courses/cunix2/libft/src/ft_strsplit.c b/courses/cunix2/libft/src/ft_strsplit.c new file mode 100644 index 00000000..389a9a0b --- /dev/null +++ b/courses/cunix2/libft/src/ft_strsplit.c @@ -0,0 +1,38 @@ + +#include +#include "../libft.h" + +char **ft_strsplit(char const *s, char c) +{ + unsigned int num_words = ft_words(s, c); + char **words = (char **) malloc(sizeof(char *) * (num_words + 1)); + + unsigned int curr_word_len; + char *word = NULL; + + while (*s != '\0') + { + while (*s == c && *s != '\0') + { + s++; + } + + if (*s != '\0') + { + curr_word_len = ft_strclen(s, c); + word = (char *) malloc(sizeof(char) * (curr_word_len + 1)); + + while (*s != c && *s != '\0') + { + *word++ = *s++; + } + + *word = '\0'; + *words++ = word - curr_word_len; + } + } + + *words = NULL; + + return words - num_words; +} diff --git a/courses/cunix2/libft/src/ft_strstr.c b/courses/cunix2/libft/src/ft_strstr.c new file mode 100644 index 00000000..c0b14829 --- /dev/null +++ b/courses/cunix2/libft/src/ft_strstr.c @@ -0,0 +1,44 @@ +char *ft_strstr(const char *haystack, const char *needle) +{ + if (*haystack == '\0') + { + return (char *) needle; + } + + if (*needle == '\0') + { + return (char *) haystack; + } + + char *h_pos; + char *n_pos; + int found = 0; + + while (*haystack != '\0') + { + h_pos = (char *) haystack; + n_pos = (char *) needle; + + while (*n_pos != '\0') + { + if (*h_pos++ == *n_pos++) + { + found = 1; + } + else + { + found = 0; + break; + } + } + + if (found) + { + return (char *) haystack; + } + + haystack++; + } + + return 0; +} diff --git a/courses/cunix2/libft/src/ft_strtrim.c b/courses/cunix2/libft/src/ft_strtrim.c new file mode 100644 index 00000000..68ef64e1 --- /dev/null +++ b/courses/cunix2/libft/src/ft_strtrim.c @@ -0,0 +1,50 @@ +#include +#include "../libft.h" + +char *ft_strtrim(const char *s) +{ + char *s_start = NULL; + char *s_end = NULL; + + while (*s != '\0' && (*s == ' ' || *s == '\t' || *s == '\n')) + { + s++; + } + + s_start = (char *) s; + + while (*s != '\0') + { + s++; + } + + s--; + + while (s != s_start && (*s == ' ' || *s == '\t' || *s == '\n')) + { + s--; + } + + s_end = (char *) s; + size_t trim_len = (size_t)(s_end - s_start + 1); + char *trim_s = NULL; + + if (s_start > s_end) + { + trim_s = (char *) malloc(sizeof(char)); + *trim_s = '\0'; + return trim_s; + } + + trim_s = (char *) malloc(sizeof(char) * (trim_len + 1)); + s = s_start; + + while (s != s_end + 1) + { + *trim_s++ = *s++; + } + + *trim_s = '\0'; + + return trim_s - trim_len; +} diff --git a/courses/cunix2/libft/src/ft_tolower.c b/courses/cunix2/libft/src/ft_tolower.c new file mode 100644 index 00000000..80c5c1d6 --- /dev/null +++ b/courses/cunix2/libft/src/ft_tolower.c @@ -0,0 +1,9 @@ +int ft_tolower(int c) +{ + if ('A' <= c && c <= 'Z') + { + c += 32; + } + + return c; +} diff --git a/courses/cunix2/libft/src/ft_toupper.c b/courses/cunix2/libft/src/ft_toupper.c new file mode 100644 index 00000000..4161afcf --- /dev/null +++ b/courses/cunix2/libft/src/ft_toupper.c @@ -0,0 +1,9 @@ +int ft_toupper(int c) +{ + if ('a' <= c && c <= 'z') + { + c -= 32; + } + + return c; +} diff --git a/courses/cunix2/libft/src/ft_words.c b/courses/cunix2/libft/src/ft_words.c new file mode 100644 index 00000000..137f0f99 --- /dev/null +++ b/courses/cunix2/libft/src/ft_words.c @@ -0,0 +1,25 @@ + +unsigned int ft_words(const char *s, char c) +{ + unsigned int num_words = 0; + + while (*s != '\0') + { + while (*s == c && *s != '\0') + { + s++; + } + + if (*s != '\0') + { + num_words++; + + while (*s != c && *s != '\0') + { + s++; + } + } + } + + return num_words; +} From 879bd90073c7ffcffd1146be3799eb4c130dc6d6 Mon Sep 17 00:00:00 2001 From: Harpreet Singh Date: Wed, 23 Feb 2022 23:11:57 +0530 Subject: [PATCH 2/5] week3 --- courses/cunix2/libft/libft.a | Bin 35018 -> 35002 bytes courses/cunix2/libft/libft.h | 38 +++++++++++++------------- courses/cunix2/libft/src/ft_abs.c | 4 +-- courses/cunix2/libft/src/ft_isalpha.c | 4 +-- courses/cunix2/libft/src/ft_memcmp.c | 12 ++++---- courses/cunix2/libft/src/ft_strchr.c | 19 +++++++------ courses/cunix2/libft/src/ft_strjoin.c | 24 +++++++--------- courses/cunix2/libft/src/ft_tolower.c | 8 +++--- 8 files changed, 52 insertions(+), 57 deletions(-) diff --git a/courses/cunix2/libft/libft.a b/courses/cunix2/libft/libft.a index 7e8ec67b57a584d43bac26184db85a27b54c55d2..0e0c72d7cb8f359d697dd18ac32cd48eec94c0c8 100644 GIT binary patch delta 744 zcmY*X-%C?b9RGf=x@NHLVxWr(tfrY`s6Fg1tljCl>n!JH4+~1DW)K*{`oZ+cxr~;V ztCf6T_Ef!uFQUjG!cd2df)d$NNq>Rh6dwlp)H-*y<<7(5`#Imw`F_5i?>S#*h2>e{ z^%KWqfLXJRW9IOZhL>$60GFU2e-1+U2<+^3$FU5rvkYf;}55-!r|6HOF9*H(!{deCU) zNUoFd=fA9&4z>-M&`FWrF8oLn;WMTKHCA{!UMTYNaR=2q6SQZ$Vi~EDyH}DMp>I-= zd}Gb@`+^ncD}v?dui$)1@JCsY-kh}J7OmCEw0YA=27^m*3FI-jg-)b|!Hvz-*CFEo zSq2^SuzT*f$TVe}sb9AB4p?f($ngQQE8BG4@1T`OK66!TURt`ei-Gjp%ZrEsng~dg zls!0I(chD;htTbQt1u0eh{bibHL4POh+7wH+%HpSz#VoB|n?pN=`kK&BA$Jk8y4!lF(aC&N^h%b5 zTI9YO`9Bbe8$S%WbF8I_m@IVs=PY=v+ZbPS+qf@iq)@sX5c!PF!1heD4>>0+R`&+81#1C`@=I~20B*mJXE}Kp<{M27# zG1F=FuhR}{IIWsag@zL=;#+dAV69c*Jsef5%)JcftTJ=spkKj)W<%>p7fzqZ*d6rK zx=4M{4R7?FJc`9bXQgn{BpSXux6Q)%G<-4l`_v`I!+`0r04^yiduX~Ell)ZNjcUkC zD55ItMdLJ=S7&#zKKwr4%XJIxyXC=UA>9?JP?-iOHU^+t7Yk8?(*+|sR3%sy$u;(m zq#}|t6-acxG^X6TLk*i^F-VHgCaEi8Q4k)gNO{)-ClTfPotBL|{kYXZ`r?k>PtN~o z(CZDl* #include -void ft_bzero(void *s, size_t n); -char *ft_strdup(const char *s); -char *ft_strchr(const char *s, int c); -int ft_isalpha(int c); -int ft_isdigit(int c); -int ft_isascii(int c); -int ft_toupper(int c); -int ft_tolower(int c); -int ft_abs(int j); -div_t ft_div(int num, int denom); -void *ft_memcpy(void *__restrict__ dest, const void *__restrict__ src, size_t n); -int ft_memcmp(const void *s1, const void *s2, size_t n); -char *ft_strnstr(const char *haystack, const char *needle, size_t n); -int ft_strncmp(const char *s1, const char *s2, size_t n); +void ft_bzero(void *, size_t); +char *ft_strdup(const char *); +char *ft_strchr(const char *, int); +int ft_isalpha(int); +int ft_isdigit(int); +int ft_isascii(int); +int ft_toupper(int); +int ft_tolower(int); +int ft_abs(int); +div_t ft_div(int, int); +void *ft_memcpy(void *, const void *, size_t); +int ft_memcmp(const void *, const void *, int); +char *ft_strnstr(const char *, const char *, size_t); +int ft_strncmp(const char *, const char *, size_t); char *ft_strjoin(char const *s1, char const *s2); -size_t ft_strlen(const char *s); +int ft_strlen(const char *); char *ft_strtrim(char const *s); char **ft_strsplit(char const *s, char c); -unsigned int ft_words(const char *s, char c); -size_t ft_strclen(const char *s, char c); +unsigned int ft_words(const char *, char); +size_t ft_strclen(const char *, char); void ft_striter(char *s, void (*f)(char *)); -void *ft_memset(void *s, int c, size_t n); -char *ft_strstr(const char *haystack, const char *needle); +void *ft_memset(void *, int, size_t); +char *ft_strstr(const char *, const char *); #endif diff --git a/courses/cunix2/libft/src/ft_abs.c b/courses/cunix2/libft/src/ft_abs.c index 22c0072b..a381a6c4 100644 --- a/courses/cunix2/libft/src/ft_abs.c +++ b/courses/cunix2/libft/src/ft_abs.c @@ -1,4 +1,4 @@ -int ft_abs(int j) +int ft_abs(int val) { - return (j < 0 ? -j : j); + return (val < 0 ? -val : val); } diff --git a/courses/cunix2/libft/src/ft_isalpha.c b/courses/cunix2/libft/src/ft_isalpha.c index 70d758c0..d53ad3ff 100644 --- a/courses/cunix2/libft/src/ft_isalpha.c +++ b/courses/cunix2/libft/src/ft_isalpha.c @@ -1,4 +1,4 @@ -int ft_isalpha(int c) +int ft_isalpha(int ch) { - return (('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z')); + return ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')); } diff --git a/courses/cunix2/libft/src/ft_memcmp.c b/courses/cunix2/libft/src/ft_memcmp.c index f2ac3013..b8164c31 100644 --- a/courses/cunix2/libft/src/ft_memcmp.c +++ b/courses/cunix2/libft/src/ft_memcmp.c @@ -1,14 +1,12 @@ -#include - -int ft_memcmp(const void *s1, const void *s2, size_t n) +int ft_memcmp(const void *str1, const void *str2, int length) { - unsigned char *s1_pos = (unsigned char *) s1; - unsigned char *s2_pos = (unsigned char *) s2; + unsigned char *str1_pos = (unsigned char *) str1; + unsigned char *str2_pos = (unsigned char *) str2; int diff; - while (n-- != 0) + while (length-- != 0) { - diff = *s1_pos++ - *s2_pos++; + diff = *str1_pos++ - *str2_pos++; if (diff != 0) { diff --git a/courses/cunix2/libft/src/ft_strchr.c b/courses/cunix2/libft/src/ft_strchr.c index 44df26f0..e9f80883 100644 --- a/courses/cunix2/libft/src/ft_strchr.c +++ b/courses/cunix2/libft/src/ft_strchr.c @@ -1,18 +1,19 @@ -#include - -char *ft_strchr(const char *s, int c) +char *ft_strchr(const char *str, int ch) { - c %= 256; + if (ch >= 256) + { + ch %= 256; + } - while (*s != '\0') + while (*str != '\0') { - if (*s == c) + if (*str == ch) { - return (char *) s; + return (char *) str; } - s++; + str++; } - return (*s == c) ? (char *) s : 0; + return (*str == ch) ? (char *) str : 0; } diff --git a/courses/cunix2/libft/src/ft_strjoin.c b/courses/cunix2/libft/src/ft_strjoin.c index 138c5d2e..1b2361ae 100644 --- a/courses/cunix2/libft/src/ft_strjoin.c +++ b/courses/cunix2/libft/src/ft_strjoin.c @@ -1,30 +1,26 @@ #include -#include "../libft.h" -char *ft_strjoin(const char *s1, const char *s2) -{ - size_t l1 = ft_strlen(s1); - size_t l2 = ft_strlen(s2); - size_t concat_l = l1 + l2; +int ft_strlen(const char *); - char *concat = (char *) malloc(sizeof(char) * (concat_l + 1)); +char *ft_strjoin(const char *str1, const char *str2) +{ + int l1 = ft_strlen(str1); + int l2 = ft_strlen(str2); + int f_l = l1 + l2; - if (!concat) - { - return 0; - } + char *concat = (char *) malloc(sizeof(char) * (f_l + 1)); while (l1-- != 0) { - *concat++ = *s1++; + *concat++ = *str1++; } while (l2-- != 0) { - *concat++ = *s2++; + *concat++ = *str2++; } *concat = '\0'; - return concat - concat_l; + return concat- f_l; } diff --git a/courses/cunix2/libft/src/ft_tolower.c b/courses/cunix2/libft/src/ft_tolower.c index 80c5c1d6..4ba395c8 100644 --- a/courses/cunix2/libft/src/ft_tolower.c +++ b/courses/cunix2/libft/src/ft_tolower.c @@ -1,9 +1,9 @@ -int ft_tolower(int c) +int ft_tolower(int ch) { - if ('A' <= c && c <= 'Z') + if (ch >= 65 && ch <= 90) { - c += 32; + ch += 32; } - return c; + return ch; } From 70b7d826d1f5566d46e30af2b6d573099fac16a3 Mon Sep 17 00:00:00 2001 From: Harpreet Singh Date: Tue, 1 Mar 2022 21:19:36 +0530 Subject: [PATCH 3/5] printf --- courses/cunix2/ft_printf/libprintf.a | Bin 0 -> 10592 bytes courses/cunix2/ft_printf/src/ft_printf.c | 99 +++++++++++++++++++++++ 2 files changed, 99 insertions(+) create mode 100644 courses/cunix2/ft_printf/libprintf.a create mode 100644 courses/cunix2/ft_printf/src/ft_printf.c diff --git a/courses/cunix2/ft_printf/libprintf.a b/courses/cunix2/ft_printf/libprintf.a new file mode 100644 index 0000000000000000000000000000000000000000..e350d8b9f81383b118feeb98655302954387978d GIT binary patch literal 10592 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 C<(Pi} literal 0 HcmV?d00001 diff --git a/courses/cunix2/ft_printf/src/ft_printf.c b/courses/cunix2/ft_printf/src/ft_printf.c new file mode 100644 index 00000000..ea297aa1 --- /dev/null +++ b/courses/cunix2/ft_printf/src/ft_printf.c @@ -0,0 +1,99 @@ +#include +#include +#include +#include + +char *_strrev (char *str) +{ + int i; + int len = 0; + char c; + if (!str) + return NULL; + while(str[len] != '\0'){ + len++; + } + for(i = 0; i < (len/2); i++) + { + c = str[i]; + str [i] = str[len - i - 1]; + str[len - i - 1] = c; + } + return str; +} + +char * _itoa(int i, char *strout, int base) +{ + char *str = strout; + int digit, sign = 0; + if (i < 0) { + sign = 1; + i *= -1; + } + while(i) { + digit = i % base; + *str = (digit > 9) ? ('A' + digit - 10) : '0' + digit; + i = i / base; + str ++; + } + if(sign) { + *str++ = '-'; + } + *str = '\0'; + _strrev(strout); + return strout; +} + +int ft_printf (char * str, ...) +{ + va_list vl; + int i = 0, j=0; + char buff[100]={0}, tmp[20]; + char * str_arg; + + va_start( vl, str ); + while (str && str[i]) + { + if(str[i] == '%'){ + i++; + switch (str[i]) { + case 'c': { + buff[j] = (char)va_arg( vl, int ); + j++; + break; + } + case 'd': { + _itoa(va_arg( vl, int ), tmp, 10); + strcpy(&buff[j], tmp); + j += strlen(tmp); + break; + } + case 'x': { + _itoa(va_arg( vl, int ), tmp, 16); + strcpy(&buff[j], tmp); + j += strlen(tmp); + break; + } + case 'o': { + _itoa(va_arg( vl, int ), tmp, 8); + strcpy(&buff[j], tmp); + j += strlen(tmp); + break; + } + case 's': { + str_arg = va_arg( vl, char* ); + strcpy(&buff[j], str_arg); + j += strlen(str_arg); + break; + } + } + } else { + buff[j] =str[i]; + j++; + } + i++; + } + fwrite(buff, j, 1, stdout); + va_end(vl); + return j; +} From f89d8e3c3dfcc6cfa2674515d2c9f818d310e299 Mon Sep 17 00:00:00 2001 From: Harpreet Singh Date: Wed, 2 Mar 2022 23:04:14 +0530 Subject: [PATCH 4/5] final solution --- courses/cunix2/ft_printf/src/ft_printf.c | 220 ++++++++++++++--------- 1 file changed, 138 insertions(+), 82 deletions(-) diff --git a/courses/cunix2/ft_printf/src/ft_printf.c b/courses/cunix2/ft_printf/src/ft_printf.c index ea297aa1..937b796a 100644 --- a/courses/cunix2/ft_printf/src/ft_printf.c +++ b/courses/cunix2/ft_printf/src/ft_printf.c @@ -1,99 +1,155 @@ -#include -#include +#include #include -#include +#include +#include -char *_strrev (char *str) +int find_length(const char *s) { - int i; - int len = 0; - char c; - if (!str) - return NULL; - while(str[len] != '\0'){ - len++; - } - for(i = 0; i < (len/2); i++) - { - c = str[i]; - str [i] = str[len - i - 1]; - str[len - i - 1] = c; - } - return str; + int length = 0; + while (*s++) + length++; + return length; } -char * _itoa(int i, char *strout, int base) +char *to_string(long int nmb, int *len) { - char *str = strout; - int digit, sign = 0; - if (i < 0) { - sign = 1; - i *= -1; - } - while(i) { - digit = i % base; - *str = (digit > 9) ? ('A' + digit - 10) : '0' + digit; - i = i / base; - str ++; - } - if(sign) { - *str++ = '-'; - } - *str = '\0'; - _strrev(strout); - return strout; + int sign; + if ((sign = nmb) < 0) + nmb = -nmb; + *len = 0; + long num = nmb; + do + { + *len = *len + 1; + } while ((num /= 10) > 0); + + char *result = (char *)malloc(*len + 1); + + for (int i = 0; i < *len; i++) + { + result[*len - 1 - i] = nmb % 10 + '0'; + nmb /= 10; + } + result[*len] = '\0'; + return result; } -int ft_printf (char * str, ...) +void fill_buffer(char *c, int number) { - va_list vl; - int i = 0, j=0; - char buff[100]={0}, tmp[20]; - char * str_arg; - - va_start( vl, str ); - while (str && str[i]) - { - if(str[i] == '%'){ - i++; - switch (str[i]) { - case 'c': { - buff[j] = (char)va_arg( vl, int ); - j++; - break; + while (number > 0) + { + write(1, c, 1); + number--; + } +} + +void print_out(const char *str) +{ + for (; *str; str++) + { + write(1, str, 1); + } +} +void print_begin(char show_sign, char print_space) +{ + if (show_sign == '\0') + { + if (print_space) + { + char *s = &print_space; + write(1, s, 1); } - case 'd': { - _itoa(va_arg( vl, int ), tmp, 10); - strcpy(&buff[j], tmp); - j += strlen(tmp); - break; + } + else + { + char *s = &show_sign; + write(1, s, 1); + } +} + +void print(const char *str, char left, char fill, char show_sign, char print_space, int num) +{ + int first_char = (show_sign || print_space) ? 1 : 0; + if (left) + { + print_begin(show_sign, print_space); + print_out(str); + fill_buffer(&fill, num - first_char); + } + else + { + + if (fill == '0') + { + print_begin(show_sign, print_space); + fill_buffer(&fill, num - first_char); + } + else + { + fill_buffer(&fill, num - first_char); + print_begin(show_sign, print_space); + } + _print_out(str); + } +} + +int ft_printf(const char *format, ...) +{ + va_list ap; + va_start(ap, format); + const char *p; + + for (p = format; *p; p++) + { + if (*p != '%') + { + write(1, p, 1); + continue; } - case 'x': { - _itoa(va_arg( vl, int ), tmp, 16); - strcpy(&buff[j], tmp); - j += strlen(tmp); - break; + + char _print_space = *++p == ' ' ? ' ' : '\0'; + + while (*p == ' ') + p++; + + char show_sign = *p == '+' ? *p++ : '\0'; + char left = *p == '-' ? *p++ : '\0'; + char fill = *p == '0' ? '0' : ' '; + + int order = 0; + for (; *p >= '0' && *p <= '9'; p++) + order = order * 10 + *p - '0'; + + switch (*p) + { + case 'i': + case 'd': { + int len; + int num = va_arg(ap, int); + char *value = to_string(num, &len); + show_sign = num < 0 ? '-' : show_sign; + print(value, left, fill, show_sign, _print_space, order - len); + free(value); } - case 'o': { - _itoa(va_arg( vl, int ), tmp, 8); - strcpy(&buff[j], tmp); - j += strlen(tmp); - break; + break; + case 'c': { + char value = va_arg(ap, int); + char *s = &value; + print(s, left, fill, show_sign, _print_space, order - 1); } + break; case 's': { - str_arg = va_arg( vl, char* ); - strcpy(&buff[j], str_arg); - j += strlen(str_arg); - break; + char *value = va_arg(ap, char *); + if (value == NULL) + value = "(null)"; + print(value, left, fill, show_sign, _print_space, order - find_length(value)); + } + break; + default: + write(1, p, 1); + break; } - } - } else { - buff[j] =str[i]; - j++; } - i++; - } - fwrite(buff, j, 1, stdout); - va_end(vl); - return j; + va_end(ap); + return p - format; } From 2b5f865be83db8906bb96b7a2754102335eeddf9 Mon Sep 17 00:00:00 2001 From: singhpreet86 <33066260+singhpreet86@users.noreply.github.com> Date: Thu, 3 Mar 2022 14:02:05 +0530 Subject: [PATCH 5/5] Update ft_printf.c --- courses/cunix2/ft_printf/src/ft_printf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/courses/cunix2/ft_printf/src/ft_printf.c b/courses/cunix2/ft_printf/src/ft_printf.c index 937b796a..94e4c49e 100644 --- a/courses/cunix2/ft_printf/src/ft_printf.c +++ b/courses/cunix2/ft_printf/src/ft_printf.c @@ -89,7 +89,7 @@ void print(const char *str, char left, char fill, char show_sign, char print_spa fill_buffer(&fill, num - first_char); print_begin(show_sign, print_space); } - _print_out(str); + print_out(str); } }