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 :

Insérer un entier dans une chaine de caractère


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2004
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 35
    Points : 34
    Points
    34
    Par défaut Insérer un entier dans une chaine de caractère
    Bnjour tout le monde,

    Voilà j'ai une variable int (exemple de valeur : 12) que je voudrais concaténé a une chaîne de caractère. Je m'explique :

    Jai un entier : int i=12;
    Jai une chaine de char : char ligne[20];
    Je l'initialise : strcpy(ligne,"bonjour");
    et je voudrais obtenir dans ligne : "bonjour12"
    Il est donc normal que strcat(ligne,i) ne marche pas puisque c'est un entier !

    Comment puis je procèder ? Merci d'avance pour vos réponse

  2. #2
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sprintf(ligne,"Bonjour%1d",i);
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    à noter que sprintf() ne gère pas la longueur du buffer, et est la porte ouverte à des dépassements.

    Il n'y a pas vraiment de fonctions standard pour le faire, mais la plupart des compilateurs ont une fonction snprintf() ou _snprintf() (attention, elles ne gèrent pas toujours bien le caractère nul, donc penser à le forcer à la fin):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    buffer[taille -1] = '\0';
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    La solution C++, c'est un ostringstream:
    http://c.developpez.com/faq/cpp/?pag...RINGS_numtostr

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    std::ostringstream oss;
    oss << "bonjour" << 12;
    std::string result = oss.str();
    apprend à utiliser les string:
    http://c.developpez.com/faq/cpp/?pag...GS_type_chaine

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Donc, il n'y a aucun moyen simple d'utiliser les bons vieux formats en chaîne de caractère avec les string?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Il y a boost::format pour ça.
    http://www.boost.org/libs/format/doc/format.html
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  7. #7
    Membre éclairé Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Points : 795
    Points
    795
    Par défaut
    Voila comment je fais:
    J'écris une fonction "int_string" :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    string int_string(int x)
    {
    ostringstream outstr;
    outstr << x;
    return outstr.str()
    }
    Ps: ne pas oublier l'en-tête "sstream"
    A++

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    OK, merci.
    Mais j'avais une fonction qui retournait un format qui différait selon un switch, comme je ne veux pas utiliser de librairie supplémentaire, je vais être frcé de déléguer toute l'écriture dans le switch...

    Enfin bon, si on appelle ça "le progrès", il faut bien le faire...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Pourquoi ne pas utiliser de biblitohèque externe ? Il est très difficile (voire impossible) de faire quoi que ce soit d'intéressant en C++ sans bibliothèque externe.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Parce que j'essaie justement de faire un effort pour programmer en C++ standard pur.
    Si c'est pour utiliser des fonctions non-standard, autant utiliser directement CString::Format() ou StringCchPrintf()...

    PS: En plus, boost, je ne sais même pas si elle est dispo directement avec tous les compilos, ou s'il faut la télécharger pour réussir à compiler le programme (j'utilise Visual 6 et Dev-C++)...
    Dans le second cas, j'ai encore moins envie de l'utiliser (déjà que je n'utilise pas toujours les fonctions de strsafe.h parce qu'on ne les a pas partout...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    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 275
    Points : 10 985
    Points
    10 985
    Par défaut
    boost est en bonne partie supporté avec VC6. Tout ne le sera pas cependant.

    Et sinon, avant de réinventer ce que boost ou la SL propose, il peut être intéressant de s'en servir dans un premier temps et de comprendre les principes plus généraux du C++. Dans un deuxième temps, il est possible de voir comment c'est réaliser, pour s'en servir dans un troisième...
    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...

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/05/2015, 12h21
  2. Réponses: 2
    Dernier message: 09/12/2009, 18h20
  3. [PHP 5.2] Additionner des nombres entiers dans une chaine de caractères
    Par lecaptain dans le forum Langage
    Réponses: 2
    Dernier message: 23/10/2009, 12h12
  4. Insérer un caractère dans une chaine de caractères
    Par Yunchi dans le forum Débuter
    Réponses: 1
    Dernier message: 06/04/2009, 17h45
  5. insérer un " dans une chaine de caractère
    Par Alisea dans le forum Langage
    Réponses: 4
    Dernier message: 28/07/2006, 17h05

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