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 :

Tableau de chaîne de caracteres


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 9
    Par défaut Tableau de chaîne de caracteres
    Voila mon probleme, je ne sais pas comment affecter a ma variable de classe le parametre de ma méthode.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class Blabla : protected Blibli {
     
     public:
       set_param(char **);
      .
      .    ...
      .
     protected:
       char ** arg ;
    };



    Ma méthode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void Blabla::set_param(char ** argv){
     
    //ici, je veux affecter en gros :   arg=argv;
    //mais ca ne marche pas, que dois je mettre?
     
    }


    Voila, merci beaucoup.

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

    Informations professionnelles :
    Activité : aucun

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

    Déjà, l'idéal est de transformer de manière systématique toutes tes chaines de caractères "C style" (tableau de char terminé par un '\0') en... chaines de caractères "C++": la classe string, disponible dans l'espace de noms std grâce à l'inclusion du fichier d'en-tête <string>.
    Tu verra que cela te facilitera énormément la vie au niveau de la gestion de tes chaines de caractères

    Une fois cela fait, il sera temps de s'intéresser au fait de gérer une collection de chaines de caractères, car c'est bel et bien ce que tu cherches à faire.

    Selon le cas, tu peux préférer pouvoir disposer d'un "accès aléatoire", d'un "accès séquentiel" ou encore de maintenir ces chaines de manière triées à tes chaines.

    L'accès aléatoire aura l'énorme avantage de te permettre de passer "directement" de la première chaine à la dixième, mais présentera quelques faiblesses au niveau de l'ajout de nouvelles chaines, et principalement s'il s'agit d'insérer une nouvelle chaine entre deux autres.

    L'accès séquentiel peut prendre plusieurs forme (FIFO, LIFO ou strictement séquentiel), et présentera l'énorme avantage de rendre l'ajout de nouvelles chaines très facile, en contrepartie du désagrément de devoir parcourir "l'ensemble des chaines" qui sépare la première de la dixième

    Enfin, le fait de maintenir tes chaines de caractères dans un ordre trié présentera une rapidité à toute épreuve lorsqu'il s'agira de les retrouver, mais présentera quelques lacune au niveau de l'insertion (cela prend pas mal de temps de garder les éléments parfaitement triés ), mais tu peux envisager tout aussi bien de garder tes chaines de caractères triées en les associant à "autre chose", et travailler selon le principe qu'une clé est associée à une valeur, ou de les considérer comme une clé qui représente d'elle même une valeur

    Ces différentes considérations t'amèneront à choisir parmi les différents conteneur ( vector pour l'acces aléatoire, queue, stack ou list pour l'accès séquentiel, set ou map pour le maintien sous une forme triée) celui qui correspond le mieux à l'utilisation que tu veux faire de ta "collection de chaines de caractères".

    Ces différentes classes sont toutes fournies, tout comme la string, directement par le standard, ce qui implique qu'elles seront toutes accessibles dans l'espace de nom std, seul le fichier d'en-tete à inclure changeant:
    • <vector> pour... les std::vector
    • <queue> pour... les std::queue
    • <stack> pour... les std::stack
    • <list> pour... les std::list
    • <set> pour... les std::set
    • et <map> pour... les std::map

    L'idée principale consistant dés lors à insérer les chaines récupérées dans la collection choisie.

    N'oublie de toutes manières jamais qu'un tableau "C style" ne connait pas sa taille, et qu'il est donc préférable de passer, de manière systématique, cette taille aux fonctions qui doivent les gérer (même si c'est de manière ponctuelle)

    N'oublie pas non plus que le rôle premier d'une classe (ou d'une structure) en C++ est... de fournir quelque chose de directement utilisable, et qu'il est donc "potentiellement intéressant" de fournir directement les informations... au constructeur.

    Au final, ta classe BlaBla pourrait ressembler à
    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
    #include <string> // pour utiliser les std::string
    #include <vector> // pour utiliser les std::vector
    class BlaBla /* : héritage éventuel */
    {
        public:
            /* le constructeur, celui qui met directement en mémoire tous les 
             * arguments en mémoire
             */
            BlaBla(int argc, char** argv)
            {
                 for(int i = 0;i<argc, ++i)
                     tab.push_back(std::string(argv[i]));
                 /* une petite vérification pourrait apparaitre ici pour s'assurer
                  * que chaque parametre n'est fourni qu'une fois ;)
                  */
            }
            /*... le reste */
        private:
            /* un tableau de std::string */
            std::vector<std::string> tab;
    };
    qui pourrait donc parfaitement etre utilisée sous une forme proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int main(int argc, char** argv)
    {
        BlaBla b(argc, argv);
        /* utilisation de b */
        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

Discussions similaires

  1. Réponses: 3
    Dernier message: 01/03/2007, 16h26
  2. [Tableaux] tableau de chaine de caractere
    Par Tempotpo dans le forum Langage
    Réponses: 3
    Dernier message: 18/05/2006, 13h54
  3. longueur chaîne de caractere
    Par jmjmjm dans le forum Langage
    Réponses: 2
    Dernier message: 26/02/2006, 23h29
  4. Différence entres chaînes de caracteres
    Par Oberown dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 18/02/2006, 11h53
  5. Tableau de chaînes de caractères
    Par mac1 dans le forum Langage
    Réponses: 3
    Dernier message: 15/01/2006, 13h18

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