Pensé que esto sería muy simple, pero presenta algunas dificultades. Si tengo
std::string name = "John";
int age = 21;
¿Cómo los combino para obtener una sola cadena "John21"
?
c++
int
concatenation
stdstring
Obediah Stane
fuente
fuente
Boost::lexical_cast
,std::stringstream
,std::strstream
(que está en desuso), ysprintf
frentesnprintf
.Respuestas:
En orden alfabético:
#include <string>
)#include <sstream>
(del estándar C ++)fuente
String(number)
.En C ++ 11, puede usar
std::to_string
, por ejemplo:fuente
Si tiene Boost, puede convertir el entero en una cadena usando
boost::lexical_cast<std::string>(age)
.Otra forma es usar cadenas de cadena:
Un tercer enfoque sería usar
sprintf
osnprintf
de la biblioteca C.Otros carteles sugirieron usar
itoa
. Esta NO es una función estándar, por lo que su código no será portátil si lo usa. Hay compiladores que no lo admiten.fuente
sprintf
en la respuesta, solosnprintf
.fuente
Descaradamente robado de http://www.research.att.com/~bs/bs_faq2.html .
fuente
s
es una pila de variables, la memoria des
estará libre después de la invocaciónitos
.s
debe asignar desde el montón, yfree
después de usar, ¿verdad?Esta es la manera más fácil:
fuente
Si tienes C ++ 11, puedes usarlo
std::to_string
.Ejemplo:
Salida:
fuente
name += std::to_string(static_cast<long long>(age));
en VC ++ 2010 como puede ver aquíname += std::to_string(age + 0LL);
lugar?Me parece que la respuesta más simple es usar la
sprintf
función:fuente
fuente
Entonces su uso se vería así
Buscado en Google [y probado: p]
fuente
Este problema se puede hacer de muchas maneras. Lo mostraré de dos maneras:
Convierta el número a cadena usando
to_string(i)
.Usando secuencias de cadena.
Código:
fuente
Si desea utilizar
+
para la concatenación de cualquier cosa que tenga un operador de salida, puede proporcionar una versión de plantilla deoperator+
:Luego puede escribir sus concatenaciones de una manera directa:
Salida:
Esta no es la forma más eficiente, pero no necesita la forma más eficiente a menos que esté haciendo una gran concatenación dentro de un bucle.
fuente
std::string
, por lo que no sería un candidato en expresiones donde una cadena no es convertible en el tipo necesario. Por ejemplo, estooperator+
no es elegible para ser utilizado+
enint x = 5 + 7;
. A fin de cuentas, no definiría un operador como este sin una razón muy convincente, pero mi objetivo era ofrecer una respuesta diferente a las demás.Si está usando MFC, puede usar un CString
Managed C ++ también tiene un formateador de cadenas .
fuente
El std :: ostringstream es un buen método, pero a veces este truco adicional puede ser útil transformando el formato a una línea:
Ahora puede formatear cadenas como esta:
fuente
Como se cerró una pregunta relacionada con Qt a favor de esta, he aquí cómo hacerlo usando Qt:
La variable de cadena ahora tiene el valor de someIntVariable en lugar de% 1 y el valor de someOtherIntVariable al final.
fuente
Hay más opciones posibles para concatenar un entero (u otro objeto numérico) con una cadena. Es Boost.Format
y Karma de Boost.Spirit (v2)
Boost.Spirit Karma afirma ser una de las opciones más rápidas para la conversión de enteros a cadenas .
fuente
Respuesta común: itoa ()
Esto es malo.
itoa
no es estándar, como se señala aquí .fuente
Puede concatenar int a string mediante el siguiente truco simple, pero tenga en cuenta que esto solo funciona cuando el entero es de un solo dígito. De lo contrario, agregue un número entero dígito a dígito a esa cadena.
fuente
Aquí hay una implementación de cómo agregar un int a una cadena usando las facetas de análisis y formato de la biblioteca IOStreams.
fuente
fuente
Escribí una función que toma el número int como parámetro y lo convierte en un literal de cadena. Esta función depende de otra función que convierte un solo dígito a su equivalente de caracteres:
fuente
Con la biblioteca {fmt} :
Se propone un subconjunto de la biblioteca para la estandarización como formato de texto P0645 y, si se acepta, lo anterior se convertirá en:
Descargo de responsabilidad : soy el autor de la biblioteca {fmt}.
fuente
Como un trazador de líneas:
name += std::to_string(age);
fuente