From 8cf046f0f5bbe1930d1502bf9492ae33711a0b0c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 11 Dec 2025 15:43:01 +0000 Subject: [PATCH] Add bilingual French/English README.md Co-authored-by: EniumRaphael <35407363+EniumRaphael@users.noreply.github.com> --- README.md | 469 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 469 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..adf8146 --- /dev/null +++ b/README.md @@ -0,0 +1,469 @@ +# 📚 Libft - Custom C Library + +
+ +![42 School](https://img.shields.io/badge/42-School-000000?style=for-the-badge&logo=42&logoColor=white) +![C](https://img.shields.io/badge/C-00599C?style=for-the-badge&logo=c&logoColor=white) +![License](https://img.shields.io/badge/license-MIT-blue?style=for-the-badge) + +*A comprehensive C library recreating standard library functions and more* + +[English](#english) | [Français](#français) + +
+ +--- + +## English + +### 📖 Table of Contents +- [About](#about) +- [Features](#features) +- [Project Structure](#project-structure) +- [Installation](#installation) +- [Usage](#usage) +- [Testing](#testing) +- [Functions List](#functions-list) +- [Author](#author) + +### 🎯 About + +**Libft** is a custom C library developed as part of the 42 school curriculum. This project involves recreating various standard C library functions and extending them with additional utilities. The library is organized into modular components, making it easy to maintain and extend. + +This library serves as a foundation for future C projects, providing reliable and well-tested implementations of common functions. + +### ✨ Features + +- **70+ functions** organized into logical modules +- **Modular architecture** with separate headers for each category +- **Well-documented** code with detailed function descriptions +- **Strict compilation** with `-Wall -Wextra -Werror` flags +- **Memory-safe** implementations +- **Extended functionality** beyond standard library functions + +### 📂 Project Structure + +``` +libft/ +├── char/ # Character manipulation functions +├── str/ # String manipulation functions +├── memory/ # Memory management functions +├── list/ # Linked list operations +├── math/ # Mathematical utilities +├── convert/ # Type conversion functions +├── print/ # Output functions (ft_printf, fd output) +├── gnl/ # Get Next Line implementation +├── includes/ # Header files +│ └── libft/ +└── Makefile # Build configuration +``` + +### 🚀 Installation + +#### Prerequisites +- GCC or Clang compiler +- Make + +#### Build Instructions + +1. **Clone the repository:** +```bash +git clone https://github.com/EniumRaphael/libft.git +cd libft +``` + +2. **Compile the library:** +```bash +make +``` + +This will create `libft.a`, a static library ready to use in your projects. + +3. **Clean build artifacts:** +```bash +make clean # Remove object files +make fclean # Remove object files and library +make re # Rebuild from scratch +``` + +### 💻 Usage + +#### Basic Usage Example + +1. **Include the headers in your code:** +```c +#include "libft/str.h" +#include "libft/memory.h" +#include "libft/print.h" +``` + +2. **Compile your program with libft:** +```bash +clang -Wall -Wextra -Werror -I includes/libft your_program.c -L. -lft -o your_program +``` + +#### Example Program + +```c +#include "libft/str.h" +#include "libft/print.h" +#include "libft/convert.h" + +int main(void) +{ + char *str = ft_strdup("Hello, 42!"); + ft_printf("String: %s\n", str); + ft_printf("Length: %d\n", ft_strlen(str)); + + int num = ft_atoi("42"); + char *num_str = ft_itoa(num); + ft_printf("Number: %s\n", num_str); + + free(str); + free(num_str); + return (0); +} +``` + +### 🧪 Testing + +Run the test suite: +```bash +make test +``` + +This will compile and run all tests in the `test/` directory. + +### 📋 Functions List + +#### Character Functions (`char/`) +| Function | Description | +|----------|-------------| +| `ft_isalpha` | Check if character is alphabetic | +| `ft_isdigit` | Check if character is a digit | +| `ft_isalnum` | Check if character is alphanumeric | +| `ft_isascii` | Check if character is ASCII | +| `ft_isprint` | Check if character is printable | +| `ft_isspace` | Check if character is whitespace | +| `ft_toupper` | Convert to uppercase | +| `ft_tolower` | Convert to lowercase | + +#### String Functions (`str/`) +| Function | Description | +|----------|-------------| +| `ft_strlen` | Calculate string length | +| `ft_strchr` | Locate character in string | +| `ft_strrchr` | Locate last occurrence of character | +| `ft_strcmp` | Compare two strings | +| `ft_strncmp` | Compare strings up to n characters | +| `ft_strcpy` | Copy string | +| `ft_strncpy` | Copy n characters of string | +| `ft_strdup` | Duplicate string | +| `ft_strjoin` | Concatenate two strings | +| `ft_strtrim` | Trim characters from string | +| `ft_split` | Split string by delimiter | +| `ft_substr` | Extract substring | +| `ft_strmapi` | Apply function to each character | +| `ft_striteri` | Iterate through string with function | +| `ft_strlcpy` | Size-bounded string copy | +| `ft_strlcat` | Size-bounded string concatenation | +| `ft_strnstr` | Locate substring in string | + +#### Memory Functions (`memory/`) +| Function | Description | +|----------|-------------| +| `ft_memset` | Fill memory with constant byte | +| `ft_bzero` | Zero a byte string | +| `ft_memcpy` | Copy memory area | +| `ft_memmove` | Copy memory with overlap handling | +| `ft_memchr` | Scan memory for character | +| `ft_memcmp` | Compare memory areas | +| `ft_calloc` | Allocate and zero memory | + +#### Linked List Functions (`list/`) +| Function | Description | +|----------|-------------| +| `ft_lstnew` | Create new list element | +| `ft_lstadd_front` | Add element at the beginning | +| `ft_lstadd_back` | Add element at the end | +| `ft_lstsize` | Count list elements | +| `ft_lstlast` | Get last element | +| `ft_lstdelone` | Delete one element | +| `ft_lstclear` | Delete and free all elements | +| `ft_lstiter` | Iterate through list | +| `ft_lstmap` | Map function over list | + +#### Mathematical Functions (`math/`) +| Function | Description | +|----------|-------------| +| `ft_abs` | Absolute value | +| `ft_power` | Power calculation | +| `ft_sqrt` | Square root | +| `ft_min` | Minimum of two numbers | +| `ft_max` | Maximum of two numbers | + +#### Conversion Functions (`convert/`) +| Function | Description | +|----------|-------------| +| `ft_atoi` | String to integer | +| `ft_atoll` | String to long long | +| `ft_atou` | String to unsigned | +| `ft_itoa` | Integer to string | + +#### Print Functions (`print/`) +| Function | Description | +|----------|-------------| +| `ft_printf` | Formatted output to stdout | +| `ft_dprintf` | Formatted output to file descriptor | +| `ft_putchar_fd` | Output character to fd | +| `ft_putstr_fd` | Output string to fd | +| `ft_putendl_fd` | Output string with newline to fd | +| `ft_putnbr_fd` | Output number to fd | + +#### Get Next Line (`gnl/`) +| Function | Description | +|----------|-------------| +| `get_next_line` | Read line from file descriptor | +| `get_next_line_clear` | Free GNL static memory | + +### 👨‍💻 Author + +**Raphael Parodi** (rparodi) +- 42 School Student +- GitHub: [@EniumRaphael](https://github.com/EniumRaphael) + +### 📄 License + +This project is part of the 42 school curriculum. Feel free to use it for learning purposes. + +--- + +## Français + +### 📖 Table des matières +- [À propos](#à-propos) +- [Fonctionnalités](#fonctionnalités) +- [Structure du projet](#structure-du-projet) +- [Installation](#installation-1) +- [Utilisation](#utilisation-1) +- [Tests](#tests) +- [Liste des fonctions](#liste-des-fonctions) +- [Auteur](#auteur-1) + +### 🎯 À propos + +**Libft** est une bibliothèque C personnalisée développée dans le cadre du cursus de l'école 42. Ce projet consiste à recréer diverses fonctions de la bibliothèque standard C et à les étendre avec des utilitaires supplémentaires. La bibliothèque est organisée en composants modulaires, ce qui la rend facile à maintenir et à étendre. + +Cette bibliothèque sert de fondation pour les futurs projets en C, fournissant des implémentations fiables et bien testées de fonctions courantes. + +### ✨ Fonctionnalités + +- **Plus de 70 fonctions** organisées en modules logiques +- **Architecture modulaire** avec des headers séparés pour chaque catégorie +- **Code bien documenté** avec des descriptions détaillées des fonctions +- **Compilation stricte** avec les flags `-Wall -Wextra -Werror` +- **Implémentations sûres** au niveau mémoire +- **Fonctionnalités étendues** au-delà de la bibliothèque standard + +### 📂 Structure du projet + +``` +libft/ +├── char/ # Fonctions de manipulation de caractères +├── str/ # Fonctions de manipulation de chaînes +├── memory/ # Fonctions de gestion mémoire +├── list/ # Opérations sur listes chaînées +├── math/ # Utilitaires mathématiques +├── convert/ # Fonctions de conversion de types +├── print/ # Fonctions de sortie (ft_printf, sortie fd) +├── gnl/ # Implémentation de Get Next Line +├── includes/ # Fichiers d'en-tête +│ └── libft/ +└── Makefile # Configuration de compilation +``` + +### 🚀 Installation + +#### Prérequis +- Compilateur GCC ou Clang +- Make + +#### Instructions de compilation + +1. **Cloner le dépôt :** +```bash +git clone https://github.com/EniumRaphael/libft.git +cd libft +``` + +2. **Compiler la bibliothèque :** +```bash +make +``` + +Cela créera `libft.a`, une bibliothèque statique prête à être utilisée dans vos projets. + +3. **Nettoyer les artifacts de compilation :** +```bash +make clean # Supprimer les fichiers objets +make fclean # Supprimer les fichiers objets et la bibliothèque +make re # Recompiler depuis zéro +``` + +### 💻 Utilisation + +#### Exemple d'utilisation basique + +1. **Inclure les headers dans votre code :** +```c +#include "libft/str.h" +#include "libft/memory.h" +#include "libft/print.h" +``` + +2. **Compiler votre programme avec libft :** +```bash +clang -Wall -Wextra -Werror -I includes/libft votre_programme.c -L. -lft -o votre_programme +``` + +#### Programme exemple + +```c +#include "libft/str.h" +#include "libft/print.h" +#include "libft/convert.h" + +int main(void) +{ + char *str = ft_strdup("Bonjour, 42!"); + ft_printf("Chaîne: %s\n", str); + ft_printf("Longueur: %d\n", ft_strlen(str)); + + int num = ft_atoi("42"); + char *num_str = ft_itoa(num); + ft_printf("Nombre: %s\n", num_str); + + free(str); + free(num_str); + return (0); +} +``` + +### 🧪 Tests + +Exécuter la suite de tests : +```bash +make test +``` + +Cela compilera et exécutera tous les tests du répertoire `test/`. + +### 📋 Liste des fonctions + +#### Fonctions de caractères (`char/`) +| Fonction | Description | +|----------|-------------| +| `ft_isalpha` | Vérifie si le caractère est alphabétique | +| `ft_isdigit` | Vérifie si le caractère est un chiffre | +| `ft_isalnum` | Vérifie si le caractère est alphanumérique | +| `ft_isascii` | Vérifie si le caractère est ASCII | +| `ft_isprint` | Vérifie si le caractère est imprimable | +| `ft_isspace` | Vérifie si le caractère est un espace blanc | +| `ft_toupper` | Convertit en majuscule | +| `ft_tolower` | Convertit en minuscule | + +#### Fonctions de chaînes (`str/`) +| Fonction | Description | +|----------|-------------| +| `ft_strlen` | Calcule la longueur d'une chaîne | +| `ft_strchr` | Localise un caractère dans une chaîne | +| `ft_strrchr` | Localise la dernière occurrence d'un caractère | +| `ft_strcmp` | Compare deux chaînes | +| `ft_strncmp` | Compare n caractères de chaînes | +| `ft_strcpy` | Copie une chaîne | +| `ft_strncpy` | Copie n caractères d'une chaîne | +| `ft_strdup` | Duplique une chaîne | +| `ft_strjoin` | Concatène deux chaînes | +| `ft_strtrim` | Supprime des caractères d'une chaîne | +| `ft_split` | Divise une chaîne par délimiteur | +| `ft_substr` | Extrait une sous-chaîne | +| `ft_strmapi` | Applique une fonction à chaque caractère | +| `ft_striteri` | Itère sur une chaîne avec une fonction | +| `ft_strlcpy` | Copie de chaîne avec limite de taille | +| `ft_strlcat` | Concaténation de chaîne avec limite | +| `ft_strnstr` | Localise une sous-chaîne | + +#### Fonctions mémoire (`memory/`) +| Fonction | Description | +|----------|-------------| +| `ft_memset` | Remplit la mémoire avec un octet constant | +| `ft_bzero` | Met à zéro une chaîne d'octets | +| `ft_memcpy` | Copie une zone mémoire | +| `ft_memmove` | Copie mémoire avec gestion de chevauchement | +| `ft_memchr` | Recherche un caractère en mémoire | +| `ft_memcmp` | Compare des zones mémoire | +| `ft_calloc` | Alloue et initialise à zéro | + +#### Fonctions de listes chaînées (`list/`) +| Fonction | Description | +|----------|-------------| +| `ft_lstnew` | Crée un nouvel élément de liste | +| `ft_lstadd_front` | Ajoute un élément au début | +| `ft_lstadd_back` | Ajoute un élément à la fin | +| `ft_lstsize` | Compte les éléments de la liste | +| `ft_lstlast` | Obtient le dernier élément | +| `ft_lstdelone` | Supprime un élément | +| `ft_lstclear` | Supprime et libère tous les éléments | +| `ft_lstiter` | Itère sur la liste | +| `ft_lstmap` | Applique une fonction sur la liste | + +#### Fonctions mathématiques (`math/`) +| Fonction | Description | +|----------|-------------| +| `ft_abs` | Valeur absolue | +| `ft_power` | Calcul de puissance | +| `ft_sqrt` | Racine carrée | +| `ft_min` | Minimum de deux nombres | +| `ft_max` | Maximum de deux nombres | + +#### Fonctions de conversion (`convert/`) +| Fonction | Description | +|----------|-------------| +| `ft_atoi` | Chaîne vers entier | +| `ft_atoll` | Chaîne vers long long | +| `ft_atou` | Chaîne vers unsigned | +| `ft_itoa` | Entier vers chaîne | + +#### Fonctions d'affichage (`print/`) +| Fonction | Description | +|----------|-------------| +| `ft_printf` | Sortie formatée vers stdout | +| `ft_dprintf` | Sortie formatée vers descripteur de fichier | +| `ft_putchar_fd` | Affiche un caractère sur fd | +| `ft_putstr_fd` | Affiche une chaîne sur fd | +| `ft_putendl_fd` | Affiche une chaîne avec retour ligne sur fd | +| `ft_putnbr_fd` | Affiche un nombre sur fd | + +#### Get Next Line (`gnl/`) +| Fonction | Description | +|----------|-------------| +| `get_next_line` | Lit une ligne depuis un descripteur de fichier | +| `get_next_line_clear` | Libère la mémoire statique de GNL | + +### 👨‍💻 Auteur + +**Raphael Parodi** (rparodi) +- Étudiant à l'école 42 +- GitHub: [@EniumRaphael](https://github.com/EniumRaphael) + +### 📄 Licence + +Ce projet fait partie du cursus de l'école 42. N'hésitez pas à l'utiliser à des fins d'apprentissage. + +--- + +
+ +**Made with ❤️ at 42 School** + +