tipos - Convertir una cadena de estilo C en una cadena C++ std::
tipos de datos en c++ (6)
En general (sin declarar nuevo almacenamiento), solo puede usar el constructor 1-arg para cambiar la cadena-c en un valor de cadena:
string xyz = std::string("this is a test") +
std::string(" for the next 60 seconds ") +
std::string("of the emergency broadcast system.");
Sin embargo, esto no funciona al construir la cadena para pasarla por referencia a una función (un problema que acabo de encontrar), por ejemplo
void ProcessString(std::string& username);
ProcessString(std::string("this is a test")); // fails
Necesitas hacer de la referencia una referencia constante:
void ProcessString(const std::string& username);
ProcessString(std::string("this is a test")); // works.
¿Cuál es la mejor manera de convertir una cadena de estilo C en una cadena C ++ std::string
? En el pasado lo he hecho usando stringstream
s. ¿Hay alguna manera mejor?
Las cadenas C ++ tienen un constructor que te permite convertir cadenas de estilo C:
char* myStr = "This is a C string!";
std::string myCppString = myStr;
Puedes inicializar un std::string
directamente desde un c-string:
std::string s = "i am a c string";
std::string t = std::string("i am one too");
Si te refieres a char*
to std::string
, puedes usar el constructor.
char* a;
std::string s(a);
O si la string s
ya existe, simplemente escribe esto:
s=std::string(a);
Verifique los diferentes constructores de la clase de cadena: documentation le puede interesar:
//string(char* s)
std::string str(cstring);
Y:
//string(char* s, size_t n)
std::string str(cstring, len_str);
C++11
: Sobrecargar un operador literal de cadena
std::string operator ""_s(const char * str, std::size_t len) {
return std::string(str, len);
}
auto s1 = "abc/0/0def"; // C style string
auto s2 = "abc/0/0def"_s; // C++ style std::string
C++14
: usar el operador desde el std::string_literals
nombres std::string_literals
using namespace std::string_literals;
auto s3 = "abc/0/0def"s; // is a std::string