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.
mystring.hVotre librairie doit contenir les fonctions suivantes:
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);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);Détermine l’égalité deux chaînes de caractères
bool string_cmp(char *s1, char *s2);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);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);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);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);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);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);Échange aléatoirement de place les caractères contenus dans la
chaîne de caractères s
void string_fry(char *s);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.
É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>.
Pour compiler vous devez écrire un Makefile contenant au moins deux cibles:
string_manip qui compile votre programme
principal et produit l’exécutable string_manip.clean qui efface tous les produits de
compilation.