IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Tableaux avec indice chaine


Sujet :

C

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    360
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 360
    Par défaut Tableaux avec indice chaine
    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.

  2. #2
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    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

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par andromeda Voir le message
    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.
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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;
    }
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Tu peux faire une recherche avec pour mot clé tables de hachage ou hash tables.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    360
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 360
    Par défaut
    merci de votre aide.

    je vais regarder ca.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    360
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 360
    Par défaut
    Par contre IndexOf je ne savais pas que ca existait en langage C.

    c'est bien du C ?

    je developpe avec visual studio 2005

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    360
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 360
    Par défaut
    ah non desole javais mal compris , indexof c 'est une fonction

    Merci.

  8. #8
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    indexOf est une fonction écrite par Sve@r en C, c'est tout, ce n'est pas une fonction intégrée au langage.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  9. #9
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Trap D Voir le message
    indexOf est une fonction écrite par Sve@r en C, c'est tout, ce n'est pas une fonction intégrée au langage.
    Citation Envoyé par andromeda Voir le message
    ah non desole javais mal compris , indexof c 'est une fonction

    Merci.
    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...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    360
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 360
    Par défaut
    ben parceque j'en avais besoin.

    ca marche bien ce code.

  11. #11
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par andromeda Voir le message
    ben parceque j'en avais besoin.
    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...

    Citation Envoyé par andromeda Voir le message
    ca marche bien ce code.
    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...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  12. #12
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    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...

    et de plus ca permet de faire un tri n'importe comment avec qsort...

  13. #13
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par andromeda Voir le message
    ben parceque j'en avais besoin.

    ca marche bien ce code.
    Si tu as le droit d'utiliser une bibliothèque tierce, tu peux utiliser la structure de donnée GHashTable de la Glib.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    360
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 360
    Par défaut
    merci.

    Je vais regarder de plus pres avec les structures, c'est une bonne idee.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Indicer un tableau avec une chaine de caractères
    Par petdelascar dans le forum C
    Réponses: 10
    Dernier message: 08/11/2007, 14h55
  2. Réponses: 2
    Dernier message: 23/03/2007, 11h42
  3. Réponses: 5
    Dernier message: 18/10/2006, 14h52
  4. Réponses: 5
    Dernier message: 26/07/2006, 11h13
  5. probl. avec les tableaux d'indices de sommets
    Par kagemusha dans le forum OpenGL
    Réponses: 2
    Dernier message: 04/07/2006, 19h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo