L’objectif de ce TP est de vous faire manipuler les pointeurs par le biais de chaines de caractères. Vous avez déjà fait des manipulations de ce type dans les exercices précédents. Pour prolonger ce type de travail, vous allez faire deux exercices. Les sources pour réaliser ces exercices sont présentes dans le fichier TP3/part1_pointers/material.
Exercice 1:
vous allez implémenter la fonction strcmp décrite ci-dessous.
Signature
int my_strcmp(char *str1, const char *str2)
Paramètres
- str1: première chaine de caractères pour la comparaison;
- str2: deuxième chaine de caractères pour la comparaison.
Valeur de retour et comportement attendu
La fonction strcmp compare str1 et str2 caractère par caractère.
- strcmp renvoie -1 si str1 est inférieure à str2
- strcmp renvoie 1 si str1 est supérieure à str2
- strcmp renvoie 0 si str1 est égale à str2
NOTE 1: pour l’implémentation de cette fonction, on s’appuiera sur les opérateur mathématiques <,>,<=, et >= qui s’appliquent aux type char.
NOTE 2: une fonction très similaire existe déjà dans la libc… tapez
$man strcmp
pour obtenir de la documentation.
Exercice 2: trier un tableau de chaines de caractères par ordre lexicographique. Pour faire cela, vous allez implémenter la fonction sort_string_array décrite ci-dessous.
Signature
void sort_string_array(char ** tab, int nb_of_elements)
Paramètres
- tab: le tableau à trier;
- nb_of_elements: le nombre d’éléments contenus dans tab.
Comportement attendu
Cette fonction trie le tableau tab: à la fin de l’exécution de sort_string_array, le contenu de tab est trié selon l’ordre lexicographique. On utilisera la fonction my_strcmp, implémentée précédemment, pour réaliser sort_string_array.
Indications
Vous pourrez utiliser l’algorithme de tri suivant:
for i = 1:n-1, for (k = i; k > 0 and a[k] < a[k-1]; k--) swap a[k,k-1]