« GLib/GLib Data Types » : différence entre les versions

Contenu supprimé Contenu ajouté
Aucun résumé des modifications
Aucun résumé des modifications
Ligne 160 :
<source lang="c">
g_list_free_full(list,freeFunction);
return 0;
}
</source>
 
=== Rechercher et retirer des éléments ===
 
Faisons maintenant un nouveau petit programme dans lequel nous apprendrons à Rechercher et retirer des éléments d'une GList.
 
Au début de notre programme, remplissons une liste avec quelques chaines de caractères.
 
<source lang="c">
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <glib.h>
 
int main(int argc, char* argv[]) {
GList* list = NULL;
 
char* tagada = "tagada";
char* kebab = "kebab";
char* chocolat = "chocolat";
char* crepe = "crepe";
 
list = g_list_append (list, tagada);
list = g_list_append (list, kebab);
list = g_list_append (list, chocolat);
list = g_list_append (list, crepe);
printf("La taille de la liste après ajout de 4 éléments est: %i\n",g_list_length(list));
</source>
 
g_list_remove prend en paramètre une GList et la valeur à supprimer.
 
<source lang="c">
list = g_list_remove(list,kebab);
printf("Après avoir retiré \"kebab\", la taille de la liste est: %i\n",g_list_length(list));
</source>
 
g_list_position prend en paramètre une GList et un noeud, et renvoie l'index du noeud dans la liste si il est présent, sinon -1.
g_list_find prend en paramètre une GList et une valeur à rechercher. Elle renvoie le noeud correspondant si trouvé, sinon NULL.
 
<source lang="c">
GList* noeudChocolat = g_list_find(list,chocolat);
if(noeudChocolat != NULL) {
int positionChocolat = g_list_position(list, noeudChocolat);
printf("La position de \"chocolat\" est: %i\n",positionChocolat);
}
</source>
 
Nous allons maintenant voir comment rechercher une chaine à l'aide d'une fonction de comparaison.
 
L'utilisateur devra saisir une chaine de caractère, qui sera recherchée dans la liste.
 
<source lang="c">
char input[16];
memset(input,0,16);
printf("Veuillez saisir la chaine à rechercher: ");
scanf("%16s",&input);
</source>
 
g_list_find custom prend un troisième paramètre: une fonction de comparaison. Elle renvoie le noeud trouvé, sinon NULL.
Une fonction de comparaison prend deux pointeurs en paramètres, compare les éléments pointés et renvoie un nombre négatif si le premier est inférieur au deuxième, 0 si ils sont égaux, et un nombre positif si il est supérieur.
C'est précisément ce que fait strcmp avec des chaînes de caractères, nous allons donc l'utiliser.
 
<source lang="c">
GList* search = g_list_find_custom(list,&input,(GCompareFunc)strcmp);
if(search != NULL) {
printf("Trouvé!\n");
}
else {
printf("Non trouvé!\n");
}
</source>
 
Enfin, désallouons la liste et terminons notre programme:
 
<source lang="c">
g_list_free(list);
return 0;
}