bonjour,
Je cherche a faire en langage C l'equivalent de
tab["toto"] = "bonjour"
est ce que c'est possible ?
comment puis je faire cela ?
Merci de votre aide.
Version imprimable
bonjour,
Je cherche a faire en langage C l'equivalent de
tab["toto"] = "bonjour"
est ce que c'est possible ?
comment puis je faire cela ?
Merci de votre aide.
non ce n'est pas possible les indices pour les tableaux sont des entiers. Ce que tu cherches à faire est une map (clé/valeur), te reste plus qu'à en écrire une ;)
Cela s'appelle un "dictionnaire" mais cela n'est pas possible en C.
Si vraiment t'en as besoin (ce qui se discute), tu dois d'abord trouver un moyen d'associer "toto" avec un indice numérique puis associer cet indice à "tab".
Par exemple le code suivant peut donner une idée
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 fonctionX() { static char *tabDico[]={ "toto", "titi", "tutu", NULL }; char tab[100][256]; strcpy(tab[indexOf(tabDico, "toto")], "bonjour"); } size_t indexOf(char **dico, char *mot) { char **pt; size_t i; for (pt=dico, i=0; *pt != NULL; pt++, i++) { if (strcmp(*pt, mot) == 0) return i; } return 0; }
Tu peux faire une recherche avec pour mot clé tables de hachage ou hash tables.
Thierry
merci de votre aide.
je vais regarder ca.
Par contre IndexOf je ne savais pas que ca existait en langage C.
c'est bien du C ?
je developpe avec visual studio 2005
ah non desole javais mal compris , indexof c 'est une fonction
Merci.
indexOf est une fonction écrite par Sve@r en C, c'est tout, ce n'est pas une fonction intégrée au langage.
Ouaip. Elle associe le mot dans le tableau à sa position et renvoie ladite position. D'ailleurs j'aurais dû plutôt l'appeler "indiceOf". Et avant que tous les fanas me sautent sur la tronche en me disant qu'elle n'est pas bonne parce que ceci ou cela (entre autres elle ne renvoie aucun code particulier signifiant "pas trouvé"), je rappelle que c'était juste pour donner une idée du truc.
Maintenant la vraie question que je me pose est "pourquoi tenter de créer cet outil qui n'existe pas en C" ? Jusqu'à présent il n'existe pas et tout le monde fait sans...
ben parceque j'en avais besoin.
ca marche bien ce code.
A mon avis, tu devrais nous dire pourquoi tu penses en avoir besoin parce que moi, je pense quand-même qu'on peut faire sans...
Boaf c'est pas vraiment compliqué à inventer. Suffit juste d'attribuer une correspondance unique (cetains appellent ça "bijection") entre chaine et indice numérique parce que le C n'accepte que des indices numériques pour un tableau (d'ailleurs les langages qui offrent le dictionnaire comme php ou Python fonctionnent probablement de la même façon). Mais bon, il est améliorable. Par exemple mon indice numérique c'est la position du mot par rapport aux autres. Si on rajoute par la suite d'autres mots au milieu, ça décale tous les indices des mots suivants (ce qui pourrait fausser le truc). Une amélioration pourrait être de remplacer le tableau des mots par un tableau de structures associant mot-indice. Ainsi, la valeur des mots est fixée une fois pour toute et ne change plus même si on rajoute d'autres mots au milieu...
Si tu as le droit d'utiliser une bibliothèque tierce, tu peux utiliser la structure de donnée GHashTable de la Glib.
Thierry
merci.
Je vais regarder de plus pres avec les structures, c'est une bonne idee.