Piscine 42 C03 : les exercices corrigés

Le projet C03 pousse plus loin la manipulation des chaînes de caractères avec des exercices qui couvrent les fonctions de concaténation, de comparaison et de copie. Découvres les solutions détaillées et commentées pour le projet C03 de la Piscine de l’école 42.

c03 ex00 : ft_strcmp

🎯 Objectif de ft_strcmp

L’objectif de cet exercice est de reproduire le comportement de la fonction standard strcmp en C. Cette fonction compare deux chaînes de caractères (s1 et s2) et renvoie un entier indiquant la différence entre les premières positions où les chaînes diffèrent.

🎓 Notions essententielles

  • Les chaînes de caractères en C : Comprendre comment parcourir deux chaînes de caractères simultanément.
  • Les comparaisons : Comparer les caractères des deux chaînes à l’aide des valeurs ASCII.
  • Les boucles : Utiliser une boucle pour comparer les chaînes caractère par caractère.

💻 Fonctionnement de ft_strcmp

Prototype de la fonction :

La fonction doit être déclarée comme suit : int ft_strcmp(char *s1, char *s2);. Elle prend deux paramètres, qui sont des pointeurs vers les chaînes de caractères à comparer, et renvoie un entier.

Comparaison des caractères :

La fonction doit parcourir les deux chaînes de caractères simultanément. À chaque position, les caractères des deux chaînes sont comparés :

  • Si les caractères sont différents, la fonction doit immédiatement renvoyer la différence (s1[i] - s2[i]).
  • Si les caractères sont identiques, la comparaison continue jusqu’à ce que l’un des deux caractères soit '\0'.

Gestion de la fin de chaîne :

Si la boucle atteint la fin des deux chaînes ('\0' dans les deux cas) sans trouver de différence, la fonction renvoie 0, ce qui signifie que les deux chaînes sont égales.

✅ Le code de ft_strcmp :

				
					int ft_strcmp(char *s1, char *s2)
{
    int i;

    i = 0;
    while (s1[i] != '\0' && s2[i] != '\0')
    {
        if (s1[i] != s2[i])
            return (s1[i] - s2[i]);
        i++;
    }
    return (s1[i] - s2[i]);
}
				
			

💡Fonction Main pour tester ft_strcmp

				
					#include <stdio.h>
    
int main(void)
{
    char str1[] = "Piscine";
    char str2[] = "Piscine";
    char str3[] = "Piscineux";

    printf("%d\n", ft_strcmp(str1, str2));  // Devrait renvoyer 0
    printf("%d\n", ft_strcmp(str1, str3));  // Devrait renvoyer une valeur négative
    printf("%d\n", ft_strcmp(str3, str1));  // Devrait renvoyer une valeur positive
    return (0);
}
				
			

c03 ex01 : ft_strncmp

🎯 Objectif de ft_strncmp

L’objectif de cet exercice est de reproduire le comportement de la fonction standard strncmp en C. Cette fonction compare jusqu’à n caractères des deux chaînes de caractères s1 et s2, et renvoie un entier indiquant la différence entre les premières positions où les chaînes diffèrent. Si les chaînes sont égales jusqu’à n caractères ou si elles sont identiques avant d’atteindre n caractères, la fonction renvoie 0.

🎓 Notions essententielles

  • Les chaînes de caractères en C : Comprendre comment parcourir deux chaînes de caractères simultanément.
  • Les comparaisons : Comparer les caractères des deux chaînes à l’aide des valeurs ASCII, mais seulement jusqu’à n caractères.
  • Les boucles : Utiliser une boucle pour comparer les chaînes caractère par caractère, jusqu’à ce que n caractères aient été comparés ou que la fin d’une chaîne soit atteinte.

💻 Fonctionnement de ft_strncmp

Prototype de la fonction :

La fonction doit être déclarée comme suit : int ft_strncmp(char *s1, char *s2, unsigned int n);. Elle prend trois paramètres : deux pointeurs vers les chaînes de caractères à comparer (s1 et s2), et un entier non signé n qui spécifie le nombre maximal de caractères à comparer.

Comparaison des caractères :

La fonction doit parcourir les deux chaînes de caractères simultanément. À chaque position, les caractères des deux chaînes sont comparés :

  • Si les caractères sont différents, la fonction doit immédiatement renvoyer la différence (s1[i] - s2[i]).
  • Si les caractères sont identiques, la comparaison continue jusqu’à atteindre n caractères ou jusqu’à ce que l’un des deux caractères soit '\0'.

Gestion des fins de chaîne et de la limite n :

La boucle s’arrête dès que n caractères ont été comparés ou que la fin d’une des chaînes est atteinte ('\0'). Si la boucle atteint n caractères sans trouver de différence, la fonction renvoie 0, ce qui signifie que les deux chaînes sont égales jusqu’au n-ième caractère.

✅ Le code de ft_strncmp :

				
					int ft_strncmp(char *s1, char *s2, unsigned int n)
{
    unsigned int i;

    i = 0;
    while (i < n && s1[i] != '\0' && s2[i] != '\0')
    {
        if (s1[i] != s2[i])
            return (s1[i] - s2[i]);
        i++;
    }
    if (i < n)
        return (s1[i] - s2[i]);
    return (0);
}
				
			

💡Fonction Main pour tester ft_strncmp

				
					#include <stdio.h>
    
int main(void)
{
    char str1[] = "Piscine";
    char str2[] = "Piscineux";
    char str3[] = "Piscine";

    printf("%d\n", ft_strncmp(str1, str2, 3));  // Devrait renvoyer 0 (les 3 premiers caractères sont identiques)
    printf("%d\n", ft_strncmp(str1, str2, 5));  // Devrait renvoyer une valeur positive (différence à la position 4)
    printf("%d\n", ft_strncmp(str1, str3, 5));  // Devrait renvoyer 0 (les chaînes sont identiques)
    return (0);
}
				
			

c03 ex02 : ft_strcat

🎯 Objectif de ft_strcat

L’objectif de cet exercice est de reproduire le comportement de la fonction standard strcat en C. Cette fonction concatène (ajoute) la chaîne source (src) à la fin de la chaîne destination (dest). Le résultat est une seule chaîne de caractères contenant les deux chaînes d’origine, la chaîne src étant ajoutée après la chaîne dest.

🎓 Notions essententielles

  • Les chaînes de caractères en C : Comprendre comment parcourir une chaîne de caractères et déterminer sa fin.
  • La concaténation : Savoir ajouter les caractères d’une chaîne à la suite d’une autre.
  • Les pointeurs et les boucles : Utiliser des pointeurs pour parcourir les chaînes et une boucle pour copier les caractères.

💻 Fonctionnement de ft_strcat

Prototype de la fonction :

La fonction doit être déclarée comme suit : char *ft_strcat(char *dest, char *src);. Elle prend deux paramètres : un pointeur vers la chaîne de destination (dest) et un pointeur vers la chaîne source (src). Elle renvoie un pointeur vers la chaîne de destination.

Trouver la fin de la chaîne dest :

Avant de pouvoir ajouter src à la fin de dest, il faut d’abord trouver où se termine dest. Cela se fait en parcourant dest jusqu’à ce que le caractère nul ('\0') soit trouvé.

Ajouter src à la fin de dest :

Une fois la fin de dest trouvée, la fonction doit ajouter chaque caractère de src à la suite de dest, en terminant par un caractère nul ('\0') pour indiquer la fin de la nouvelle chaîne concaténée.

Retourner le pointeur destination :

La fonction doit retourner le pointeur vers la chaîne de destination (dest), maintenant modifiée pour inclure src.

✅ Le code de ft_strcat :

				
					char *ft_strcat(char *dest, char *src)
{
    int i;
    int j;

    i = 0;
    while (dest[i] != '\0')
        i++;
    j = 0;
    while (src[j] != '\0')
    {
        dest[i] = src[j];
        i++;
        j++;
    }
    dest[i] = '\0';
    return dest;
}
				
			

💡Fonction Main pour tester ft_strcat

				
					#include <stdio.h>

int main(void)
{
    char dest[50] = "Salut";
    char src[] = " Piscineux";

    ft_strcat(dest, src);
    printf("Result: %s\n", dest);  // Devrait afficher "Salut Piscineux"
    return (0);
}
				
			

📋 Les exercices de C03 :

Les projets C de la piscine 42 :

Retour en haut