Piscine 42 C04 : les exercices corrigés
C04 te présente des fonctions utilitaires essentielles pour manipuler les chaînes de caractères et les nombres. Ce module t’apprend aussi à interagir avec l’utilisateur via des fonctions de sortie, comme l’affichage de chaînes et de nombres. Découvres ci-dessous les solutions détaillées et commentées pour le projet C04 de la Piscine de l’école 42.
C04 ex00 : ft_strlen
🎯 Objectif de ft_strlen
L’objectif de cet exercice est d’écrire une fonction qui compte le nombre de caractères dans une chaîne de caractères et qui retourne ce nombre. Cette fonction doit reproduire le comportement de la fonction standard strlen
en C.
🎓 Notions essententielles
- Les chaînes de caractères en C : Comprendre qu’une chaîne de caractères est un tableau de
char
se terminant par un caractère nul ('\0'
). - Les pointeurs : Utiliser des pointeurs pour parcourir la chaîne de caractères.
- Les boucles : Utiliser une boucle pour parcourir la chaîne jusqu’à rencontrer le caractère nul.
💻 Fonctionnement de ft_strlen
Prototype de la fonction :
La fonction doit être déclarée comme suit : int ft_strlen(char *str);
. Elle prend un seul paramètre, un pointeur vers une chaîne de caractères, et renvoie un entier représentant la longueur de la chaîne (c’est-à-dire le nombre de caractères avant le caractère nul '\0'
).
Parcours de la chaîne :
La fonction doit parcourir la chaîne de caractères en utilisant une boucle. À chaque itération, on incrémente un compteur pour compter chaque caractère jusqu’à ce que le caractère nul ('\0'
) soit rencontré.
Retourner la longueur :
Une fois la fin de la chaîne atteinte, la fonction renvoie le compteur, qui représente la longueur de la chaîne.
✅ Le code de ft_strlen :
int ft_strlen(char *str)
{
int len;
len = 0;
while (str[len] != '\0')
{
len++;
}
return (len);
}
💡Fonction Main pour tester ft_strlen
#include
int main(void)
{
char str[] = "Piscineux";
int length;
length = ft_strlen(str);
printf("Le nombre de caracteres de '%s' est : %d\n", str, length);
return (0);
}
C04 ex01 : ft_putstr
🎯 Objectif de ft_putstr
L’objectif de cet exercice est d’écrire une fonction qui affiche une chaîne de caractères sur la sortie standard (l’écran), caractère par caractère. Cette fonction doit reproduire le comportement de la fonction puts
mais sans ajouter de caractère de fin de ligne (\n
) à la fin de la chaîne.
🎓 Notions essententielles
- Les chaînes de caractères en C : Comprendre qu’une chaîne de caractères est un tableau de
char
se terminant par un caractère nul ('\0'
). - La fonction
write
: Utilisation de cette fonction pour afficher des caractères.write
est la seule fonction autorisée pour cet exercice. - Les boucles : Utiliser une boucle pour parcourir la chaîne de caractères et afficher chaque caractère.
💻 Fonctionnement de ft_putstr
Prototype de la fonction :
La fonction doit être déclarée comme suit : void ft_putstr(char *str);
. Elle prend un seul paramètre, un pointeur vers une chaîne de caractères, et ne renvoie rien.
Parcours et affichage des caractères :
La fonction doit parcourir la chaîne de caractères avec une boucle, de manière similaire à ft_strlen
, sauf qu’ici, chaque caractère est affiché à l’aide de la fonction write
.
Utilisation de la fonction write
:
write
prend trois paramètres : le descripteur de fichier (1 pour la sortie standard), un pointeur vers les données à écrire (ici, un caractère), et le nombre d’octets à écrire (1 pour un caractère). Pour chaque caractère de la chaîne, on appelle write
avec ces paramètres.
✅ Le code de ft_putstr :
#include
void ft_putstr(char *str)
{
int i;
i = 0;
while (str[i])
{
write(1, &str[i], 1);
i++;
}
}
💡Fonction Main pour tester ft_putstr
int main(void)
{
ft_putstr("Good Job piscineux!\n");
return 0;
}
C04 ex02 : ft_putnbr
🎯 Objectif de ft_putnbr
L’objectif de cet exercice est d’écrire une fonction qui affiche un nombre entier passé en paramètre. La fonction doit être capable d’afficher la totalité des valeurs possibles pour une variable de type int
, y compris les valeurs négatives.
🎓 Notions essententielles
- Les nombres en C : Comprendre la représentation des nombres entiers en C, y compris les nombres négatifs.
- La récursion : Utiliser la récursion pour décomposer l’affichage d’un nombre entier en affichant les chiffres un par un.
- La fonction
write
: Utiliser cette fonction pour afficher les caractères correspondant aux chiffres du nombre.
💻 Fonctionnement de ft_putnbr
Prototype de la fonction :
La fonction doit être déclarée comme suit : void ft_putnbr(int nb);
. Elle prend un seul paramètre, un entier nb
, et ne renvoie rien.
Gestion des valeurs négatives :
Si le nombre est négatif, la fonction doit d’abord afficher un signe '-'
, puis convertir le nombre en positif pour simplifier l’affichage des chiffres. Une exception est faite pour -2147483648
(la plus petite valeur d’un int
en C), qui doit être traitée séparément en raison de la limite de la représentation des nombres en C.
Affichage des chiffres :
Le nombre est décomposé chiffre par chiffre, de droite à gauche, en utilisant l’opération modulo (%
) pour extraire le dernier chiffre, puis la division (/
) pour retirer ce chiffre du nombre. La fonction utilise la récursion pour d’abord afficher les chiffres les plus significatifs.
✅ Le code de ft_putnbr :
#include
void ft_putnbr(int nb)
{
if (nb == -2147483648)
{
write(1, "-2147483648", 11);
return;
}
if (nb < 0)
{
write(1, "-", 1);
nb = -nb;
}
if (nb >= 10)
{
ft_putnbr(nb / 10);
ft_putnbr(nb % 10);
}
else
{
ft_putchar(nb + '0');
}
}
💡Fonction Main pour tester ft_putnbr
int main(void)
{
ft_putnbr(42); // Devrait afficher "42"
write(1, "\n", 1);
ft_putnbr(-42); // Devrait afficher "-42"
write(1, "\n", 1);
ft_putnbr(0); // Devrait afficher "0"
write(1, "\n", 1);
ft_putnbr(-2147483648); // Devrait afficher "-2147483648"
write(1, "\n", 1);
return (0);
}