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 :

Parcours de tableaux


Sujet :

C++

  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 113
    Par défaut Parcours de tableaux
    Bonjour,

    j 'ai un gros soucis.

    Voici ce que je cherche à faire :

    J'ai un tableau de *char à 2 dimensions.

    tableau[0][1] = "poux";
    tableau[0][2] = "chou";
    tableau[0][3] = "tete";
    ....
    ....

    Je veux récuperer dans une variable, une des lettres.

    Par exemple, si je passe x=0 et y =1 à ma fonction, je cherche un moyen d'aller chercher le u de tableau[0][1]

    Je suis preneur de tout conseils.

    J'ai testé en déplacant un pointeur sur la cellule, mais sans succès.

    Merci d'avance

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    char *element_tableau(const int X, const int Y)
    {
       return tableau[X][Y];
    }
    Ca ne marche pas ?
    Il est déclaré et initialisé comment ton tableau ?
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    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
    Le prototype ne paraît pas juste puisque tu renvoies un char* et que le posteur cherche à récupérer un char.

    Ensuite j'ai un doute que tableau[0][1] contient réellement un "poux" il contiendrait plus le 'p' qu'autre chose.

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par BATCHOS CON TEQUILA Voir le message
    J'ai un tableau de *char à 2 dimensions.

    tableau[0][1] = "poux";
    tableau[0][2] = "chou";
    tableau[0][3] = "tete";
    J'ai un petit peu mal lu le problème effectivement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    char lettre_element_tableau(const int X, const int Y, const int Pos)
    {
       // ATTENTION, il y a un controle à faire sur la validite de 'X' et 'Y' par rapport a la taille du tableau
       const char *mot = tableau[X][Y];
     
       // ATTENTION, il y a un controle à faire sur la validite de 'Pos' par rapport a la longueur du mot
       return mot[Pos];
    }
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    Salut, et bienvenue sur le forum.

    Il faudrait vraiment que tu nous fournisse le code par lequel tu déclare et le code par lequel tu alloue ton tableau, cela nous évitera de partir sur des hypothèses erronées, voir de mettre le doigt sur une erreur commise lors de l'initialisation de ce tableau

    Ceci étant, j'ai l'impression que tu cherche à obtenir un tableau de chaînes de caractères.

    Si c'est le cas, nous ne le répéterons jamais assez, il est largement préférable d'utiliser la classe "string", disponible par inclusion du fichier d'en-tête <string> dans l'espace de nommage std, chaque fois que tu as besoin d'une chaîne de caractères.

    Cette classe standard présente d'énormes avantages par rapport aux chaînes de caractères "C style" (tableau de caractères terminés par un '\0', comme on utilise en C), que je vais éviter d'énumérer dans un premier temps, mais que j'expliquerai si tu en fais la demande.

    De la même manière, surtout si tu fais une allocation dynamique de la mémoire pour ton tableau (la "première dimension" de ton tableau, en l'ocurence), tu devrais préférer l'utilisation de la classe template vector, disponible elle aussi dans l'espace de nommage std mais par l'inclusion du fichier d'en-tête <vector>

    La déclaration d'une variable de type vector se fait, tout simplement, sous la forme de
    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
    /* inclusion du fichier d'en tête */
    #include <vector>
    /* si tu veux te faciliter la vie, mais à éviter dans les fichier d'en-tête 
     * que tu pourrais créer
     */
    using namespace std; /* permet d'utiliser vector au lieu de std::vector */
    void fonction()
    {
        /*sans la directive using */
        std::vector<le_type_d_element_contenu_par_le_tableau> tab;
        /* avec la directive using */
        vector<le_type_d_element_contenu_par_le_tableau> tab;
        /*l'ajout d'un élément en fin de tableau */
        tab.push_back(nouvel_element);
        /* la récupération de l'élément à l'indice n */
        le_type_d_element_contenu_par_le_tableau recup=tab[n];
    }
    Ensuite, n'oublie pas que, dans la plupart des circonstances, les variables globlaes, c'est mal.

    Si donc tu n'utilise pas une classe, il faudrait sans doute te tourner vers un code du genre de
    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
    #include <iostream>
    #include <string>
    #include <vector>
    using namespace std;
    /* la fonction qui permet de récupérer le y ieme caractère de la 
     * x ieme chaîne
     * @ in: tab: référence constante vers le tableau
     *       x: position de la chaine dans le tableau
     *       y: position du caracètre dans la chaine
     * @ out: caractère trouvé
     */
    const char get(const vector<string>& tab, size_t x, size_t y)
    {
        return tab[x][y];
    }
     
    int main()
    {
        vector<string> tab;
        tab.push_back("poux");
        tab.push_back("chou");
        tab.push_back("tete");
        for(size_t i=0;i<tab.size();i++)
            cout<<get(tab,i,2)<<endl;
        return 0;
    }
    Si tu travaille avec une classe, elle pourrait prendre une forme proche de
    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
    29
    30
    31
    32
    33
    34
    35
    #include <string>
    #include <vector>
     
    class StringTab
    {
        public:
            StringTab(){}/* rien à faire  */
            ~StringTab(){}/* rien à faire */
            void addString(const std::string& toadd)
            {
                tab.push_back(toadd);
            }
            /*récupère la chaine complete */
            const std::string& getString(size_t ind) const
            {
                return tab[ind];
            }
            size_t size() const
            {
                return tab.size();
            }
    /* la fonction qui permet de récupérer le pos ieme caractère de la
     * ch ieme chaîne
     * @ in: x: position de la chaine dans le tableau
     *       y: position du caracètre dans la chaine
     * @ out: caractère trouvé
     */
            const char charInString(size_t ch,size_t pos)
            {
                return tab[ch][pos];
            }
            /* on pourrait envisager de redéfinir l'operateur [] ;) */
        private:
            std::vector<std::string> tab;
    };
    et elle pourrait etre utilisée sous une forme ressemblant à
    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
    #include <iostream>
    using namespace std;
     
    int main()
    {
        StringTab obj;
        obj.addString("poux");
        obj.addString("chou");
        obj.addString("tete");
        /* pour s'assurer que toutes les chaines sont bien là */
        for(size_t i=0;i<obj.size();i++)
            cout<<obj.getString(i)<<endl;
        for(size_t i=0;i<obj.size();i++)
            cout<<obj.charInString(i,2)<<endl;
        return 0;
    }
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

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

Discussions similaires

  1. Perl et le parcours de tableaux (3D)
    Par OPSulaf dans le forum Langage
    Réponses: 4
    Dernier message: 19/09/2014, 21h23
  2. [PHP 5.2] Parcours de tableaux (POST)
    Par LadyArwen dans le forum Langage
    Réponses: 3
    Dernier message: 18/06/2010, 13h58
  3. Parcours de tableaux
    Par developpeur99 dans le forum Langage
    Réponses: 6
    Dernier message: 23/01/2009, 09h33
  4. Parcours de Tableaux à n dimensions
    Par maxperchus dans le forum C#
    Réponses: 3
    Dernier message: 02/05/2008, 15h53
  5. [Tableaux] Parcours de tableaux
    Par it_bcn dans le forum Langage
    Réponses: 29
    Dernier message: 06/04/2007, 11h09

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