Cours de programmation séquentielle

Chaînes de caractères

Buts

Énoncé

Une chaîne de caractère est un tableau unidimensionnel de char se terminant par le caractère '\0' ou l’entier 0. Le but de ce travail pratique est d’écrire une librairie mystring.h permettant de manipuler des chaînes de caractères. Puis dans un deuxième temps, il s’agira d’écrire un programme démontrant des cas d’utilisations votre librairie.

La librairie mystring.h

Votre librairie doit contenir les fonctions suivantes:

  1. Ajoute la chaîne de caractère src à la fin de la chaîne de caractères dest. Cette fonction retourne 0 si tout s’est bien passé, 1 si une erreur s’est produite (p.ex. la chaîne dest est trop petite).

    int string_cat(size_t dest_size, char *dest, char *src);
  2. Retourne un pointeur vers la première occurrence du caractère c dans la chaîne de caractère s. Si le caractère est absent on retourne NULL.

    char *string_chr(char *s, char c);
  3. Détermine l’égalité deux chaînes de caractères

    bool string_cmp(char *s1, char *s2);
  4. Copie la chaîne de caractères src dans la chaîne de caractères dest. Cette fonction retourne 0 si tout s’est bien passé, 1 si une erreur s’est produite (p.ex. la chaîne dest est trop petite).

    int string_cpy(size_t dest_size, char *dest, char *src);
  5. Retourne la longueur de la chaîne de caractères s. On ne compte pas le \0 terminal dans ce décompte.

    size_t string_len(char *s);
  6. Ajoute au plus n caractères de la chaîne de caractères src dans la chaîne de caractères dest. Cette fonction retourne 0 si tout s’est bien passé, 1 si une erreur s’est produite (p.ex. la chaîne dest est trop petite).

    int string_ncat(size_t dest_size, char *dest, char *src, size_t n);
  7. Détermine l’égalité d’au plus n octets des chaînes de caractères s1 et s2.

    bool string_ncmp(char *s1, char *s2, size_t n);
  8. Copie au plus n caractères de la chaîne de caractères src à la chaîne de caractères dest. Cette fonction retourne 0 si tout s’est bien passé, 1 si une erreur s’est produite (p.ex. la chaîne dest est trop petite).

    int string_ncpy(char *dest, char *src, size_t n);
  9. Retourne le nombre d’occurrences du caractère c dans la chaîne de caractères s.

    size_t string_cnt_chr(char *s, char c);
  10. Échange aléatoirement de place les caractères contenus dans la chaîne de caractères s

    void string_fry(char *s);

Remarque

On alloue ici des tableaux statiques, dont la taille est connue à la compilation, p.ex. une taille de 100 pour la taille maximale des tableaux de char à utiliser pour stocker les chaînes de caractères (pensez à utiliser le préprocesseur). Idéalement, ces fonctions utilisent l’allocation dynamique de mémoire, mais cela est pour une prochaine fois.

Programme

Écrire un programme, string_manip.c, qui utilise les fonctions de votre librairie et démontre son bon fonctionnement en affichant les résultats à l’écran. L’exécutable généré s’appellera ici string_manip.

Le programme string_manip.c prendra des arguments à la ligne de commande avec les notions vues en cours. Son utilisation sera la suivante:

$ ./string_manip <num> [arguments_supplémentaires]

Le premier argument, <num>, est un des 10 numéros correspondant à la librairie mystring.h ci-dessus. Les [arguments_supplémentaires] correspondent aux arguments des fonctions correspondant à <num>.

Compilation

Pour compiler vous devez écrire un Makefile contenant au moins deux cibles: