TP4: utilisation des pointeurs

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 TP4/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]

Suite du TP4