Je pensais que ce serait vraiment simple, mais cela présente des difficultés. Si j'ai
std::string name = "John";
int age = 21;
Comment les combiner pour obtenir une seule chaîne "John21"
?
c++
int
concatenation
stdstring
Obediah Stane
la source
la source
Boost::lexical_cast
,std::stringstream
,std::strstream
(qui est dépréciée), etsprintf
contresnprintf
.Réponses:
Par ordre alphabétique:
#include <string>
)#include <sstream>
(du standard C ++)la source
String(number)
.En C ++ 11, vous pouvez utiliser
std::to_string
, par exemple:la source
Si vous avez Boost, vous pouvez convertir l'entier en chaîne à l'aide de
boost::lexical_cast<std::string>(age)
.Une autre façon est d'utiliser des chaînes de caractères:
Une troisième approche consisterait à utiliser
sprintf
ou àsnprintf
partir de la bibliothèque C.D'autres affiches ont suggéré d'utiliser
itoa
. Ce n'est PAS une fonction standard, donc votre code ne sera pas portable si vous l'utilisez. Il existe des compilateurs qui ne le prennent pas en charge.la source
sprintf
dans la réponse, seulementsnprintf
.la source
Sans vergogne volé à http://www.research.att.com/~bs/bs_faq2.html .
la source
s
est une variable de pile, la mémoire des
sera libre après appelitos
.s
devrait allouer à partir du tas, etfree
après utilisation, non?C'est le moyen le plus simple:
la source
Si vous avez C ++ 11, vous pouvez utiliser
std::to_string
.Exemple:
Production:
la source
name += std::to_string(static_cast<long long>(age));
dans VC ++ 2010 comme vous pouvez le voir iciname += std::to_string(age + 0LL);
place?Il me semble que la réponse la plus simple est d'utiliser la
sprintf
fonction:la source
la source
Votre utilisation ressemblerait alors à ceci
Googlé [et testé: p]
la source
Ce problème peut se faire de plusieurs manières. Je vais le montrer de deux manières:
Convertissez le nombre en chaîne à l'aide de
to_string(i)
.Utilisation de flux de chaînes.
Code:
la source
Si vous souhaitez utiliser
+
pour la concaténation de tout ce qui a un opérateur de sortie, vous pouvez fournir une version modèle deoperator+
:Ensuite, vous pouvez écrire vos concaténations de manière simple:
Production:
Ce n'est pas le moyen le plus efficace, mais vous n'avez pas besoin du moyen le plus efficace, sauf si vous faites beaucoup de concaténation dans une boucle.
la source
std::string
, donc ne serait pas candidat dans les expressions où une chaîne n'est pas convertible en le type requis. Par exemple, ceoperator+
n'est pas éligible pour être utilisé+
dansint x = 5 + 7;
. Tout bien considéré, je ne définirais pas un opérateur comme celui-ci sans une raison très convaincante, mais mon objectif était de proposer une réponse différente des autres.Si vous utilisez MFC, vous pouvez utiliser un CString
Managed C ++ possède également un formateur de chaînes .
la source
Le std :: ostringstream est une bonne méthode, mais parfois cette astuce supplémentaire peut être utile pour transformer le formatage en une ligne:
Vous pouvez maintenant formater des chaînes comme ceci:
la source
Comme une question liée à Qt a été fermée en faveur de celle-ci, voici comment le faire en utilisant Qt:
La variable chaîne a maintenant la valeur de someIntVariable à la place de% 1 et la valeur de someOtherIntVariable à la fin.
la source
Il existe d'autres options possibles pour concaténer un entier (ou un autre objet numérique) avec une chaîne. C'est Boost.Format
et Karma de Boost.Spirit (v2)
Boost.Spirit Karma prétend être l'une des options les plus rapides pour la conversion d' entiers en chaînes .
la source
Réponse commune: itoa ()
C'est mauvais.
itoa
est non standard, comme indiqué ici .la source
Vous pouvez concaténer int en chaîne en utilisant l'astuce simple donnée ci-dessous, mais notez que cela ne fonctionne que lorsque l'entier est à un seul chiffre. Sinon, ajoutez un nombre entier chiffre par chiffre à cette chaîne.
la source
Voici une implémentation de la façon d'ajouter un int à une chaîne à l'aide des facettes d'analyse et de formatage de la bibliothèque IOStreams.
la source
la source
Il y a une fonction que j'ai écrite, qui prend le nombre entier comme paramètre et le convertit en chaîne littérale. Cette fonction dépend d'une autre fonction qui convertit un seul chiffre en son équivalent char:
la source
Avec la bibliothèque {fmt} :
Un sous-ensemble de la bibliothèque est proposé pour la normalisation en tant que formatage de texte P0645 et, s'il est accepté, ce qui précède deviendra:
Avertissement : je suis l'auteur de la bibliothèque {fmt}.
la source
En tant que doublure:
name += std::to_string(age);
la source