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.h
Votre 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.