Piscine 42 C02 : les exercices corrigés
C02 est centré sur la manipulation des chaînes de caractères. Tu apprendras à créer, manipuler et comparer des chaînes, tout en te familiarisant avec les fonctions de base. Ce module renforce aussi ta compréhension des tableaux et des pointeurs. Découvres ci-dessous les solutions détaillées et commentées pour le projet C02 de la Piscine de l’école 42.
C02 ex00 : ft_strcpy
🎯 Objectif de ft_strcpy
L’idée dans cet exercice c’est de reproduire le comportement de la fonction standard strcpy
. Cette fonction copie le contenu d’une chaîne de caractères source (src
) vers une chaîne de caractères destination (dest
).
👉 voir le man de strcpy
🎓 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 et les tableaux : Manipuler des pointeurs pour parcourir et copier les éléments d’une chaîne.
- Les boucles : Utiliser une boucle pour copier chaque caractère de la chaîne source vers la chaîne destination, y compris le caractère nul final.
💻 Fonctionnement de ft_strcpy
Prototype de la fonction :
La fonction doit être déclarée comme suit : char *ft_strcpy(char *dest, char *src);
. Elle prend deux paramètres : un pointeur vers la chaîne destination et un pointeur vers la chaîne source. Elle retourne un pointeur vers la chaîne destination.
Copie des caractères :
La fonction doit parcourir la chaîne source (src
) caractère par caractère et copier chaque caractère dans la chaîne destination (dest
). La copie continue jusqu’à ce que le caractère nul ('\0'
) soit rencontré, indiquant la fin de la chaîne.
Retourner le pointeur destination :
Une fois la copie terminée, la fonction retourne le pointeur vers la chaîne destination (dest
).
✅ Le code de ft_strcpy :
char *ft_strcpy(char *dest, char *src)
{
int i;
i = 0;
while (src[i] != '\0')
{
dest[i] = src[i];
i++;
}
dest[i] = '\0';
return dest;
}
💡Fonction Main pour tester ft_strcpy
#include
int main(void)
{
char src[20] = "Vive la piscine";
char dest[20];
printf("%s\n", ft_strcpy(&dest[0], &src[0]));
}
C02 ex02 : ft_strncpy
🎯 Objectif de ft_strncpy
L’objectif de cet exercice est de reproduire le comportement de la fonction standard strncpy
en C. Cette fonction copie jusqu’à n
caractères de la chaîne source (src
) vers la chaîne destination (dest
). Si la chaîne source est plus courte que n
caractères, la chaîne destination est complétée par des caractères nuls ('\0'
).
👉 voir le man de strncpy
🎓 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 et les tableaux : Manipuler des pointeurs pour parcourir et copier les éléments d’une chaîne.
- Les boucles : Utiliser une boucle pour copier jusqu’à
n
caractères de la chaîne source vers la chaîne destination. - Gestion des chaînes courtes : Savoir compléter la chaîne destination par des caractères nuls si la chaîne source est plus courte que
n
.
💻 Fonctionnement de ft_strncpy
Prototype de la fonction :
La fonction doit être déclarée comme suit : char *ft_strncpy(char *dest, char *src, unsigned int n);
. Elle prend trois paramètres : un pointeur vers la chaîne destination, un pointeur vers la chaîne source, et un entier non signé n
qui correspond aunombre maximum de caractères à copier.
Copie des caractères :
La fonction doit parcourir la chaîne source (src
) jusqu’à n
caractères ou jusqu’à ce que le caractère nul ('\0'
) soit rencontré. Si la longueur de src
est inférieure à n
, la chaîne destination doit être complétée par des caractères nuls.
Retourner le pointeur destination :
Une fois la copie terminée, la fonction retourne le pointeur vers la chaîne destination (dest
).
✅ Le code de ft_strncpy :
char *ft_strncpy(char *dest, char *src, unsigned int n)
{
unsigned int i;
i = 0;
while (i < n && src[i] != '\0')
{
dest[i] = src[i];
++i;
}
while (i < n)
{
dest[i] = '\0';
i++;
}
return (dest);
}
💡Fonction Main pour tester ft_strncpy
#include
int main(void)
{
char src[] = "Bonjour";
char dest[15];
printf("%s\n", ft_strncpy(dest, src, 15 ));
printf("%s\n", strncpy(dest, src, 15 ));
}
👉 Ce main
permet de vérifier que la fonction ft_strncpy
se comporte de la même manière que la fonction standard strncpy
. Il montre si les chaînes sont correctement copiées et si le remplissage avec des \0
fonctionne bien lorsque la taille spécifiée est supérieure à la longueur de la chaîne source.
C02 ex02 : ft_str_is_alpha
🎯 Objectif de ft_str_is_alpha
L’objectif de cet exercice est d’écrire une fonction qui vérifie si une chaîne de caractères passée en paramètre ne contient que des caractères alphabétiques (lettres). Si c’est le cas, la fonction doit renvoyer 1
; sinon, elle doit renvoyer 0
. La fonction doit également renvoyer 1
si la chaîne est vide.
🎓 Notions essententielles
- Les chaînes de caractères en C : Comprendre comment parcourir une chaîne de caractères et vérifier chaque caractère.
- Les caractères alphabétiques : Savoir reconnaître un caractère alphabétique en utilisant les codes ASCII ou des fonctions prédéfinies telles que
isalpha
(bien que dans cet exercice, on doit se passer de ces fonctions). - Les boucles : Utiliser une boucle pour parcourir chaque caractère de la chaîne.
💻 Fonctionnement de ft_str_is_alpha
Prototype de la fonction :
La fonction doit être déclarée comme suit : int ft_str_is_alpha(char *str);
. Elle prend un seul paramètre, un pointeur vers une chaîne de caractères, et renvoie un entier.
Vérification des caractères :
La fonction doit parcourir la chaîne de caractères et vérifier si chaque caractère est alphabétique. Pour cela, on peut utiliser les comparaisons directes avec les codes ASCII des lettres majuscules ('A'
à 'Z'
) et minuscules ('a'
à 'z'
).
Gestion de la chaîne vide :
Si la chaîne est vide (le premier caractère est '\0'
), la fonction doit immédiatement renvoyer 1
.
Renvoi du résultat :
Si un caractère non alphabétique est trouvé, la fonction renvoie 0
. Si tous les caractères sont alphabétiques, ou si la chaîne est vide, la fonction renvoie 1
.
✅ Le code de ft_str_is_alpha :
int ft_str_is_alpha(char *str)
{
int i;
i = 0;
while (str[i] != '\0')
{
if ((str[i] < 'a' || str[i] > 'z') && (str[i] < 'A' || str[i] > 'Z'))
{
return (0);
}
i++;
}
return (1);
}
💡Fonction Main pour tester ft_str_is_alpha :
int main(void)
{
char str1[] = "Piscine";
char str2[] = "Piscine42";
char str3[] = "";
printf("%d\n", ft_str_is_alpha(str1)); // Devrait renvoyer 1
printf("%d\n", ft_str_is_alpha(str2)); // Devrait renvoyer 0
printf("%d\n", ft_str_is_alpha(str3)); // Devrait renvoyer 1
return (0);
}
C02 ex03 : ft_str_is_numeric
🎯 Objectif de ft_str_is_numeric
L’objectif de cet exercice est d’écrire une fonction qui vérifie si une chaîne de caractères passée en paramètre ne contient que des chiffres. Si c’est le cas, la fonction doit renvoyer 1
; sinon, elle doit renvoyer 0
. La fonction doit également renvoyer 1
si la chaîne est vide.
🎓 Notions essententielles
- Les chaînes de caractères en C : Comprendre comment parcourir une chaîne de caractères et vérifier chaque caractère.
- Les caractères numériques : Savoir reconnaître un caractère numérique en utilisant les codes ASCII pour les chiffres (
'0'
à'9'
). - Les boucles : Utiliser une boucle pour parcourir chaque caractère de la chaîne.
💻 Fonctionnement de ft_str_is_numeric
Prototype de la fonction :
La fonction doit être déclarée comme suit : int ft_str_is_numeric(char *str);
. Elle prend un seul paramètre, un pointeur vers une chaîne de caractères, et renvoie un entier.
Vérification des caractères :
La fonction doit parcourir la chaîne de caractères et vérifier si chaque caractère est numérique. Pour cela, on peut utiliser les comparaisons directes avec les codes ASCII des chiffres ('0'
à '9'
).
Gestion de la chaîne vide :
Si la chaîne est vide (le premier caractère est '\0'
), la fonction doit immédiatement renvoyer 1
.
Renvoi du résultat :
Si un caractère non numérique est trouvé, la fonction renvoie 0
. Si tous les caractères sont numériques, ou si la chaîne est vide, la fonction renvoie 1
.
✅ Le code de ft_str_is_numeric :
int ft_str_is_numeric(char *str)
{
int i;
i = 0;
while (str[i] != '\0')
{
if (!(str[i] >= '0' && str[i] <= '9'))
{
return 0;
}
i++;
}
return 1;
}
💡Fonction Main pour tester ft_str_is_numeric :
#include
int main(void)
{
char str1[] = "123456";
char str2[] = "1234a56";
char str3[] = "";
printf("%d\n", ft_str_is_numeric(str1)); // Devrait renvoyer 1
printf("%d\n", ft_str_is_numeric(str2)); // Devrait renvoyer 0
printf("%d\n", ft_str_is_numeric(str3)); // Devrait renvoyer 1
return (0);
}
C02 ex04 : ft_str_is_lowercase
🎯 Objectif de ft_str_is_lowercase
L’objectif de cet exercice est d’écrire une fonction qui vérifie si une chaîne de caractères passée en paramètre ne contient que des lettres minuscules. Si c’est le cas, la fonction doit renvoyer 1
; sinon, elle doit renvoyer 0
. La fonction doit également renvoyer 1
si la chaîne est vide.
🎓 Notions essententielles
- Les chaînes de caractères en C : Comprendre comment parcourir une chaîne de caractères et vérifier chaque caractère.
- Les caractères minuscules : Savoir reconnaître un caractère minuscule en utilisant les codes ASCII pour les lettres minuscules (
'a'
à'z'
). - Les boucles : Utiliser une boucle pour parcourir chaque caractère de la chaîne.
💻 Fonctionnement de ft_str_is_lowercase
Prototype de la fonction :
La fonction doit être déclarée comme suit : int ft_str_is_lowercase(char *str);
. Elle prend un seul paramètre, un pointeur vers une chaîne de caractères, et renvoie un entier.
Vérification des caractères :
La fonction doit parcourir la chaîne de caractères et vérifier si chaque caractère est une lettre minuscule. Pour cela, on peut utiliser les comparaisons directes avec les codes ASCII des lettres minuscules ('a'
à 'z'
).
Gestion de la chaîne vide :
Si la chaîne est vide (le premier caractère est '\0'
), la fonction doit immédiatement renvoyer 1
.
Renvoi du résultat :
Si un caractère non minuscule est trouvé, la fonction renvoie 0
. Si tous les caractères sont des lettres minuscules, ou si la chaîne est vide, la fonction renvoie 1
.
✅ Le code de ft_str_is_lowercase :
int ft_str_is_lowercase(char *str)
{
int i;
i = 0;
while (str[i] != '\0')
{
if ((str[i] >= 'a') && (str[i] <= 'z'))
i++;
else
return (0);
}
return (1);
}
💡Fonction Main pour tester ft_str_is_lowercase :
#include
int main(void)
{
char str1[] = "piscine";
char str2[] = "Piscine";
char str3[] = "";
printf("%d\n", ft_str_is_lowercase(str1)); // Devrait renvoyer 1
printf("%d\n", ft_str_is_lowercase(str2)); // Devrait renvoyer 0
printf("%d\n", ft_str_is_lowercase(str3)); // Devrait renvoyer 1
return (0);
}