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 :

Quel type d'argument choisir ?


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 62
    Par défaut Quel type d'argument choisir ?
    Bonjour tout le monde,
    j'ai un code qui fonctionne qui ressemble à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    long strToLong(string str, int base) {
        char * p;
        long var_strToLong = strtol(str.c_str(), &p, base);
     
        if(*p != '\0'){
            var_strToLong = 0;
        }
     
        return var_strToLong;
    }
    On passe à cette valeur une chaine de caractère (str) et la fonction convertit cette chaine en long. Jusqu'ici pas de soucis.

    Mais on me précise que :

    Cette fonction prend un argument de type chaîne de caractères, sachant qu'on doit pouvoir lui passer, indifféremment, un litéral chaîne (ex. "hello"), un argument de la ligne de commande (type : char const *) ou une variable de type std::string.
    Pour cela, à vous de trouver le bon type pour l'argument.

    Aucun des arguments n'est censé être modifié par la fonction. Aucun argument de type "objet" ne doit être clôné en appelant la fonction.
    Trouvez les bons modes de passage. Ces règles s'appliquent aux fonctions qui suivent aussi.
    Et j'voulais donc savoir si un simple 'string str' pouvait gérer tous ces cas ?
    C'est surtout le "un argument de la ligne de commande (type : char const *)" que j'ai pas compris...

  2. #2
    jmv
    jmv est déconnecté
    Membre chevronné Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395
    Par défaut Re: Quel type d'argument choisir ?
    Citation Envoyé par R'SKaP
    C'est surtout le "un argument de la ligne de commande (type : char const *)" que j'ai pas compris...
    Il faut que ta fonction accepte un argument de type char const *, c'est tout, c'est le type des arguments d'un programme.

    pour le reste, fait des essais !

  3. #3
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Seule la surcharge permet d'obtenir cela. (pour les std::string, on évite la copie avec les références constantes)
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Citation Envoyé par Luc Hermitte
    Seule la surcharge permet d'obtenir cela. (pour les std::string, on évite la copie avec les références constantes)
    Bah, pour des chaînes littérales, des const char * et des std::string, s'il prend en paramètre un const std::string& ça règle tout.

    Par contre pour la conversion :
    http://c.developpez.com/faq/cpp/?pag...RINGS_strtonum

  5. #5
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Citation Envoyé par Loulou24
    Citation Envoyé par Luc Hermitte
    Seule la surcharge permet d'obtenir cela. (pour les std::string, on évite la copie avec les références constantes)
    Bah, pour des chaînes littérales, des const char * et des std::string, s'il prend en paramètre un const std::string& ça règle tout.
    Pas si j'ai bien lu les specs : pas de copies.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 62
    Par défaut Re: Quel type d'argument choisir ?
    Citation Envoyé par jmv
    Citation Envoyé par R'SKaP
    C'est surtout le "un argument de la ligne de commande (type : char const *)" que j'ai pas compris...
    Il faut que ta fonction accepte un argument de type char const *, c'est tout, c'est le type des arguments d'un programme.

    pour le reste, fait des essais !
    Justement c'est ce que je veux faire des essais, mais concrètement comment tester un argument de type char const *

    une chaine litteral, j'peux tester ça avec un "hello" par exemple, un std::string aussi mais pour tester un argument de type char const *
    j'met quoi ?

  7. #7
    Membre émérite Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Par défaut
    Salut, par exemple pour montrer que tu prend bien la ligne de commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    int main(int argc, char*argv[]) {
     if (argc==1)
        cout << argv[0] <<" [Chaine a convertir] "   << "[Base] (optionel)'<<endl;
     if (argc >1)
        strToLong(argv[1],argv[2]);   
     
    }
    Attention, il faut tester que argv[2] est un nombre

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Pas si j'ai bien lu les specs : pas de copies.
    Pas de copie pour les "objets". Mais a priori rien n'empêche d'en construire à partir des const char *. Et puis l'énoncé parle de trouver "le bon type d'argument pour la fonction", pas la "bonne méthode". Enfin c'est comme ça que je comprends l'énoncé.

    une chaine litteral, j'peux tester ça avec un "hello" par exemple, un std::string aussi mais pour tester un argument de type char const *
    j'met quoi ?
    Une chaîne littérale est un char const *.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char const * String = "salut";

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 62
    Par défaut
    Ok donc j'pense que ceci est bon (en tout cas mes tests marchent) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    long strToLong(std::string const & str, int base) {
        char * p;
        long var_strToLong = strtol(str.c_str(), &p, base);
     
        if(*p != '\0'){
            var_strToLong = 0;
        }
     
        return var_strToLong;
    }
    En tout cas j'vous remerci

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

Discussions similaires

  1. quel type de donnée choisir pour simuler le type Currency
    Par maamar1979 dans le forum Débuter
    Réponses: 2
    Dernier message: 18/02/2007, 12h44
  2. Quel type de table choisir pour la création d'un forum
    Par Xunil dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 19/11/2006, 12h40
  3. Quel type de liste choisir ? (Vector, ArrayList, ...)
    Par dinver dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 19/01/2006, 12h09
  4. Quel type de projet choisir pour incorporer directX9...
    Par Coderm@n dans le forum DirectX
    Réponses: 6
    Dernier message: 02/08/2004, 13h24

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