¿Cuál es la mejor forma de convertir una cadena de estilo C en C++ std::string
? En el pasado lo he hecho usando stringstream
s. ¿Hay una mejor manera?Conversión de una cadena de estilo C en C++ std :: string
Respuesta
C cadenas ++ tienen un constructor que le permite convertir cadenas estilo C:
char* myStr = "This is a C string!";
std::string myCppString = myStr;
y ahora también tengo que hacer 'delete myStr;' no? –
@BarnabasSzabolcs No, eso no es necesario. Solo necesita borrar la memoria asignada con la nueva. Los punteros a los literales de cadena no necesitan desasignarse. – templatetypedef
Veo, así que estoy acertando, string hace una copia interna de este char *. –
Puede 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");
Verificar los diferentes constructores de la clase de cadena: documentation Quizás le interese:
//string(char* s)
std::string str(cstring);
Y:
//string(char* s, size_t n)
std::string str(cstring, len_str);
Si se refiere a char*
-std::string
, puede utilizar el constructor.
char* a;
std::string s(a);
O si el string s
ya existen, sólo tiene que escribir esto:
s=std::string(a);
No. Su ejemplo arrojaría un error lógico en el constructor de std :: string. 'a' no puede ser NULL. –
En general (sin declarar un nuevo almacenamiento) sólo se puede utilizar el constructor 1-arg cambiar el c-cadena en una cadena de valor p:
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 cuando se construye la cadena de pasarlo 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
Usted necesita para tomar la referencia de una referencia constante:
void ProcessString(const std::string& username);
ProcessString(std::string("this is a test")); // works.
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
: Utilice el operador de std::string_literals
espacio de nombres
using namespace std::string_literals;
auto s3 = "abc\0\0def"s; // is a std::string
- 1. C++/CLI La conversión de Sistema :: string^std :: string
- 2. C++ std :: string to boolean
- 3. convirtiendo cadena de estilo c a cadena de estilo C++
- 4. Eliminar espacios de std :: string en C++
- 5. std :: cadena en C#?
- 6. Obtenga bytes de std :: string en C++
- 7. C++ std :: string y NULL const char *
- 8. Conversión de doble a cadena en C++
- 9. C-Style strings a std :: cadena conversión aclaración
- 10. Unicode y std :: string en C++
- 11. Cython C++ y std :: string
- 12. Cadena de C++ a doble conversión
- 13. Conversión de std :: string a bool
- 14. La conversión a TCHAR cadena en C++
- 15. conversión de bytes a una cadena C#
- 16. Convertir flotador para std :: string en C++
- 17. ¿Por qué debería uno usar std :: cadena sobre cadenas estilo c en C++?
- 18. Comparación de Literal de carácter a Std :: String en C++
- 19. C# equivalente de C++ find_first_not_of std :: string y find_last_not_of
- 20. ¿Están C++ std :: map <string, string> ordenados?
- 21. ¿std :: string :: c_str() siempre devuelve una cadena terminada en nulo?
- 22. conversión de Ada cadena de C Void *
- 23. C#: Conversión de cadena a Sbyte *
- 24. Conversión de std :: string a mayúsculas: ¿diferencia de rendimiento importante?
- 25. conversión de XML a cadena usando C#
- 26. cadena en notación C. científica ++ a doble conversión
- 27. cadena a la conversión DateTime en C#
- 28. C++ .NET convert System :: String to std :: string
- 29. Conversión entre C++ std :: vector y C array sin copiar
- 30. Operador de conversión de sobrecarga C++ para tipo personalizado a std :: cadena
¿Qué es un cstring? ¿Te refieres a un 'CString' de MFC? ¿O una matriz de caracteres terminados en nulo (una cadena C)? ¿O algo mas? –