Pensé que esto sería realmente simple pero presenta algunas dificultades. Si tengo
std::string name = "John";
int age = 21;
¿Cómo los combino para obtener una sola cadena? "John21"
?
Pensé que esto sería realmente simple pero presenta algunas dificultades. Si tengo
std::string name = "John";
int age = 21;
¿Cómo los combino para obtener una sola cadena? "John21"
?
En orden alfabético:
std::string name = "John";
int age = 21;
std::string result;
// 1. with Boost
result = name + boost::lexical_cast<std::string>(age);
// 2. with C++11
result = name + std::to_string(age);
// 3. with FastFormat.Format
fastformat::fmt(result, "{0}{1}", name, age);
// 4. with FastFormat.Write (requires #include <sstream>)
fastformat::write(result, name, age);
// 5. with the {fmt} library
result = fmt::format("{}{}", name, age);
// 6. with IOStreams
std::stringstream sstm;
sstm << name << age;
result = sstm.str();
// 7. with itoa
char numstr[21]; // enough to hold all numbers up to 64-bits
result = name + itoa(age, numstr, 10);
// 8. with sprintf
char numstr[21]; // enough to hold all numbers up to 64-bits
sprintf(numstr, "%d", age);
result = name + numstr;
// 9. with STLSoft's integer_to_string
char numstr[21]; // enough to hold all numbers up to 64-bits
result = name + stlsoft::integer_to_string(numstr, 21, age);
// 10. with STLSoft's winstl::int_to_string()
result = name + winstl::int_to_string(age);
// 11. With Poco NumberFormatter
result = name + Poco::NumberFormatter().format(age);
#include <string>
)#include <sstream>
(del estándar C ++)En C ++ 11, puedes usar std::to_string
, p.ej.:
auto result = name + std::to_string( age );
Si tiene Boost, puede convertir el entero en una cadena usando boost::lexical_cast<std::string>(age)
.
Otra forma es usar stringstreams:
std::stringstream ss;
ss << age;
std::cout << name << ss.str() << std::endl;
Un tercer enfoque sería usar sprintf
o snprintf
de la biblioteca C
char buffer[128];
snprintf(buffer, sizeof(buffer), "%s%d", name.c_str(), age);
std::cout << buffer << std::endl;
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.
std::ostringstream o;
o << name << age;
std::cout << o.str();
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
string itos(int i) // convert int to string
{
stringstream s;
s << i;
return s.str();
}
Desvergonzadamente robado de http://www.research.att.com/~bs/bs_faq2.html.
Esta es la manera más fácil:
string s = name + std::to_string(age);
Me parece que la respuesta más simple es usar el sprintf
función:
sprintf(outString,"%s%d",name,age);
Si tiene C ++ 11, puede usar std::to_string
.
Ejemplo:
std::string name = "John";
int age = 21;
name += std::to_string(age);
std::cout << name;
Salida:
John21
#include <string>
#include <sstream>
using namespace std;
string concatenate(std::string const& name, int i)
{
stringstream s;
s << name << i;
return s.str();
}
No tengo el karma suficiente para comentar (y mucho menos editar), pero la publicación de Jay (actualmente la más votados en 27) contiene un error. Este código:
std::stringstream ss;
ss << age;
std::cout << name << ss.str() << std::endl;
Hace no resuelve el problema establecido de crear una cadena que consiste en una cadena concatenada y un entero. Creo que Jay quería decir algo más como esto:
std::stringstream ss;
ss << name;
ss << age;
std::cout << "built string: " << ss.str() << std::endl;
La última línea es solo para imprimir el resultado, y muestra cómo acceder a la cadena concatenada final.