+NAME=libft.a
+CC=cc
+CFLAGS=-Wall -Wextra -Werror
+
+SRC_FILES = $(wildcard *.c)
+OBJ_FILES = $(SRC_FILES:.c=.o)
+
+
+all: $(NAME)
+
+$(NAME): $(OBJ_FILES)
+ ar rcs $(NAME) $(OBJ_FILES)
+
+clean:
+ rm -f $(OBJ_FILES)
+
+fclean: clean
+ -rm -f $(NAME)
+
+re: fclean all
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/03/06 16:25:27 by dkaiser #+# #+# */
-/* Updated: 2024/03/06 19:41:51 by dkaiser ### ########.fr */
+/* Updated: 2024/03/07 14:04:02 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
posneg = 1;
result = 0;
i = 0;
- while (str[i] >= '\t' && str[i] <= '\r' || str[i] == ' ')
+ while ((str[i] >= '\t' && str[i] <= '\r') || str[i] == ' ')
{
i++;
}
posneg = -1;
i++;
}
+ else if (str[i] == '+')
+ i++;
while (str[i] >= '0' && str[i] <= '9')
{
result = 10 * result + str[i] - '0';
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/03/05 10:57:36 by dkaiser #+# #+# */
-/* Updated: 2024/03/06 11:49:38 by dkaiser ### ########.fr */
+/* Updated: 2024/03/07 12:48:25 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
void ft_bzero(void *s, size_t n)
{
- char *ptr;
size_t i;
- ptr = (char *)b;
i = 0;
while (i < n)
{
- ptr[i] = 0;
+ ((char *)s)[i] = 0;
i++;
}
}
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/03/06 19:45:56 by dkaiser #+# #+# */
-/* Updated: 2024/03/06 19:52:19 by dkaiser ### ########.fr */
+/* Updated: 2024/03/07 16:34:30 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
#include <stdlib.h>
-void *calloc(size_t count, size_t size)
+void *ft_calloc(size_t count, size_t size)
{
void *result;
size_t i;
result = malloc(count * size);
- i = 0;
- while (i < count * size)
+ if (result)
{
- *((char *)result + i) = 0;
- i++;
+ i = 0;
+ while (i < count * size)
+ {
+ *((char *)result + i) = 0;
+ i++;
+ }
}
return (result);
}
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/03/04 19:59:23 by dkaiser #+# #+# */
-/* Updated: 2024/03/04 21:06:31 by dkaiser ### ########.fr */
+/* Updated: 2024/03/07 13:10:30 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
-int isalpha(int c)
+int ft_isalpha(int c)
{
if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'))
return (1);
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/03/05 11:15:12 by dkaiser #+# #+# */
-/* Updated: 2024/03/05 11:39:34 by dkaiser ### ########.fr */
+/* Updated: 2024/03/07 13:48:53 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
#include <string.h>
-void *ft_memcpy(void *restrict dst, const void *restrict src, size_t n)
+void *ft_memcpy(void *dst, const void *src, size_t n)
{
- size_t i;
+ char *dst_ptr;
+ char *src_ptr;
- i = 0;
- while (i < n)
- {
- *((char *)dst + i) = *((char *)src + i);
- i++;
- }
+ dst_ptr = (char *)dst;
+ src_ptr = (char *)src;
+ if (!dst && !src)
+ return (dst);
+ while (n--)
+ *dst_ptr++ = *src_ptr++;
return (dst);
}
/* #include <stdio.h> */
/* int main(void) */
/* { */
-/* char src[] = "Test Hurra"; */
-/* char src2[] = "Test Hurra"; */
-/* char dst[] = "AAAAAAIIIIIEEEEE"; */
-/* char dst2[] = "AAAAAAIIIIIEEEEE"; */
+/* char src[] = "a"; */
+/* char src2[] = "a"; */
+/* char dst[] = ""; */
+/* char dst2[] = ""; */
/* printf("ft_memcpy: %s\n", (char *) ft_memcpy(dst, src, 20)); */
/* printf("memcpy: %s\n", (char *) memcpy(dst2, src2, 20)); */
/* } */
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/03/05 11:41:44 by dkaiser #+# #+# */
-/* Updated: 2024/03/06 14:12:14 by dkaiser ### ########.fr */
+/* Updated: 2024/03/07 13:50:41 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
{
size_t i;
+ if (!dst && !src)
+ return (dst);
if (dst > src)
{
i = len;
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/03/05 09:58:19 by dkaiser #+# #+# */
-/* Updated: 2024/03/05 11:21:24 by dkaiser ### ########.fr */
+/* Updated: 2024/03/07 11:42:44 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
void *ft_memset(void *b, int c, size_t len)
{
- char *ptr;
size_t i;
- ptr = (char *)b;
i = 0;
while (i < len)
{
- ptr[i] = (unsigned char)c;
+ ((char *)b)[i] = (unsigned char)c;
i++;
}
return (b);
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/03/06 20:36:14 by dkaiser #+# #+# */
-/* Updated: 2024/03/06 20:38:06 by dkaiser ### ########.fr */
+/* Updated: 2024/03/06 21:18:50 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
void ft_putchar_fd(char c, int fd)
{
- write(fd, &c, 1);
+ write(fd, &c, 1);
}
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/03/06 14:12:39 by dkaiser #+# #+# */
-/* Updated: 2024/03/06 14:35:37 by dkaiser ### ########.fr */
+/* Updated: 2024/03/07 16:10:27 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
return ((char *)&s[i]);
i++;
}
+ if (!c)
+ return ((char *)&s[i]);
return (0);
}
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/03/06 13:36:59 by dkaiser #+# #+# */
-/* Updated: 2024/03/06 14:11:36 by dkaiser ### ########.fr */
+/* Updated: 2024/03/07 16:09:50 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
#include <string.h>
-size_t ft_strlcat(char *restrict dst, const char *restrict src, size_t dstsize)
+/* size_t ft_strlcat(char *dst, const char *src, size_t dstsize) */
+/* { */
+/* size_t len; */
+/* size_t i; */
+
+/* if (dstsize == 0) */
+/* return (0); */
+/* len = 0; */
+/* while (len < dstsize - 1 && dst[len] != '\0') */
+/* { */
+/* len++; */
+/* } */
+/* i = 0; */
+/* while (len < dstsize - 1 && src[i] != '\0') */
+/* { */
+/* dst[len] = src[i]; */
+/* len++; */
+/* i++; */
+/* } */
+/* dst[len] = '\0'; */
+/* return (len); */
+/* } */
+
+size_t ft_strlcat(char *dst, const char *src, size_t dstsize)
{
- size_t len;
+ size_t src_len;
+ size_t dst_len;
size_t i;
- if (dstsize == 0)
- return (0);
- len = 0;
- while (len < dstsize - 1 && dst[len] != '\0')
- {
- len++;
- }
+ src_len = 0;
+ while (src[src_len])
+ src_len++;
+ dst_len = 0;
+ while (dst[dst_len])
+ dst_len++;
+ if (dst_len >= dstsize)
+ return (dstsize + src_len);
i = 0;
- while (len < dstsize - 1 && src[i] != '\0')
+ while (i < src_len && dst_len + i < dstsize - 1)
{
- dst[len] = src[i];
- len++;
+ dst[dst_len + i] = src[i];
i++;
}
- dst[len] = '\0';
- return (len);
+ dst[dst_len + i] = '\0';
+ return (dst_len + src_len);
}
/* #include <stdio.h> */
/* int main () { */
/* char dst[12] = "Hello "; */
/* char dst2[12] = "Hello "; */
-/* char src[] = "World"; */
+/* char src[] = "World123"; */
/* size_t len = strlcat(dst, src, 12); */
/* size_t len2 = ft_strlcat(dst2, src, 12); */
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/03/06 12:45:25 by dkaiser #+# #+# */
-/* Updated: 2024/03/06 13:30:25 by dkaiser ### ########.fr */
+/* Updated: 2024/03/07 14:01:05 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
#include <string.h>
-size_t ft_strlcpy(char *restrict dst, const char *restrict src, size_t dstsize)
+size_t ft_strlcpy(char *dst, const char *src, size_t dstsize)
{
size_t len;
}
dst[len] = '\0';
while (src[len] != '\0')
- {
len++;
- }
+ }
+ else
+ {
+ while (src[len] != '\0')
+ len++;
}
return (len);
}
/* size_t len; */
/* size_t len2; */
-/* len = strlcpy(dst, src, 10); */
-/* len2 = ft_strlcpy(dst2, src, 10); */
+/* len = strlcpy(dst, src, 0); */
+/* len2 = ft_strlcpy(dst2, src, 0); */
/* printf("strlcpy (%zu): %s\n", len, dst); */
/* printf("ft_strlcpy (%zu): %s\n", len2, dst2); */
/* } */
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/03/06 14:45:10 by dkaiser #+# #+# */
-/* Updated: 2024/03/06 15:10:48 by dkaiser ### ########.fr */
+/* Updated: 2024/03/07 14:26:15 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
result = 0;
while (!result && n > 0 && (*s1 || *s2))
{
- result = *s1 - *s2;
+ result = (unsigned char)*s1 - (unsigned char)*s2;
if (*s1)
s1++;
if (*s2)
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/03/06 16:07:54 by dkaiser #+# #+# */
-/* Updated: 2024/03/06 16:24:52 by dkaiser ### ########.fr */
+/* Updated: 2024/03/07 16:40:20 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
size_t k;
i = 0;
+ if (*needle == '\0' || needle == haystack)
+ return ((char *)haystack);
while (i < len)
{
k = 0;
- while (haystack[i + k] == needle[k])
+ while (haystack[i + k] && haystack[i + k] == needle[k] && i + k < len)
{
k++;
}
}
/* #include <stdio.h> */
-/* int main() { */
-/* char haystack[] = "Hello world"; */
-/* char needle[] = "d"; */
-/* printf("strnstr: %s\n", strnstr(haystack, needle, 10)); */
-/* printf("ft_strnstr: %s\n", ft_strnstr(haystack, needle, 10)); */
+
+/* int main(void) */
+/* { */
+/* char haystack[] = "M"; */
+/* char needle[] = "MZIRIBMZE"; */
+
+/* printf("strnstr: %s\n", strnstr(haystack, haystack, 2)); */
+/* printf("ft_strnstr: %s\n", ft_strnstr(haystack, haystack, 2)); */
/* } */
/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/03/06 14:25:30 by dkaiser #+# #+# */
-/* Updated: 2024/03/06 14:35:16 by dkaiser ### ########.fr */
+/* Updated: 2024/03/07 14:09:13 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
last_occurrence = (char *)&s[i];
i++;
}
+ if (!c)
+ last_occurrence = (char *)&s[i];
return (last_occurrence);
}
-#ifndef LIBFT_H_
-#define LIBFT_H_
-
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* libft.h :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2024/03/06 21:38:24 by dkaiser #+# #+# */
+/* Updated: 2024/03/07 16:23:00 by dkaiser ### ########.fr */
+/* */
+/* ************************************************************************** */
+#ifndef LIBFT_H_
+# define LIBFT_H_
-#endif // LIBFT_H_
+int ft_isalpha(int c);
+int ft_isdigit(int c);
+int ft_isalnum(int c);
+int ft_isprint(int c);
+int ft_isascii(int c);
+int ft_strlen(const char *str);
+void *ft_memset(void *b, int c, size_t len);
+void ft_bzero(void *s, size_t n);
+void *ft_memcpy(void *dst, const void *src, size_t n);
+void *ft_memmove(void *dst, const void *src, size_t len);
+size_t ft_strlcpy(char *dst, const char *src, size_t dstsize);
+size_t ft_strlcat(char *dst, const char *src, size_t dstsize);
+int ft_toupper(int c);
+int ft_tolower(int c);
+char *ft_strchr(const char *s, int c);
+char *ft_strrchr(const char *s, int c);
+int ft_strncmp(const char *s1, const char *s2, size_t n);
+void *ft_memchr(const void *s, int c, 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 len);
+int ft_atoi(const char *str);
+void *ft_calloc(size_t count, size_t size);
+char *ft_strdup(const char *s1);
+char *ft_substr(char const *s, unsigned int start, size_t len);
+char *ft_strjoin(char const *s1, char const *s2);
+char *ft_strtrim(char const *s1, char const *set);
+char **ft_split(char const *s, char c);
+char *ft_itoa(int n);
+char *ft_strmapi(char const *s, char (*f)(unsigned int, char));
+void ft_striteri(char *s, void (*f)(unsigned int, char *));
+void ft_putchar_fd(char c, int fd);
+void ft_putstr_fd(char *s, int fd);
+void ft_putendl_fd(char *s, int fd);
+void ft_putnbr_fd(int n, int fd);
+#endif