Cómo convertir una cadena en un array de caracteres en C++
-
Usa el método
std::basic_string::c_strpara convertir la cadena en un array de caracteres -
Use el contenedor
std::vectorpara convertir una cadena en un array de caracteres - Usar las operaciones de manipulación de punteros para convertir una cadena en un array de caracteres
Este artículo introduce múltiples métodos para convertir los datos de las string en char.
Usa el método std::basic_string::c_str para convertir la cadena en un array de caracteres
Esta versión es la forma de C++ de resolver el problema anterior. Utiliza el método incorporado de clase string c_str que devuelve un puntero a un array de caracteres con terminación nula.
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl using std::string;
int main() {
string tmp_string = "This will be converted to char*";
auto c_string = tmp_string.c_str();
cout << c_string << endl;
return EXIT_SUCCESS;
}
Resultado:
This will be converted to char*
Si tienes intención de modificar los datos almacenados en el puntero devuelto por el método c_str(), primero debes copiar el rango a una ubicación diferente con la función memmove y luego operar en la cadena de caracteres de la siguiente manera:
#include <cstring>
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl using std::string;
int main() {
string tmp_string = "This will be converted to char*";
char *c_string_copy = new char[tmp_string.length() + 1];
memmove(c_string_copy, tmp_string.c_str(), tmp_string.length());
/* do operations on c_string_copy here */
cout << c_string_copy;
delete[] c_string_copy;
return EXIT_SUCCESS;
}
Tenga en cuenta que, puede copiar los datos de c_string utilizando varias funciones como: memcpy, memccpy, mempcpy, strcpy o strncpy, pero ten en cuenta que debes leer las páginas del manual y considerar cuidadosamente sus edge cases/bugs.
Use el contenedor std::vector para convertir una cadena en un array de caracteres
Otra forma es almacenar los carácters de string en un contenedor vector y luego usar sus poderosos métodos incorporados para manipular los datos de forma segura.
#include <iostream>
#include <iterator>
#include <string>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
int main() {
string tmp_string = "This will be converted to char*\n";
vector<char> vec_str(tmp_string.begin(), tmp_string.end());
std::copy(vec_str.begin(), vec_str.end(),
std::ostream_iterator<char>(cout, ""));
return EXIT_SUCCESS;
}
Usar las operaciones de manipulación de punteros para convertir una cadena en un array de caracteres
En esta versión, definimos un puntero char llamado tmp_ptr y le asignamos la dirección del primer carácter en tmp_string.
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl using std::string;
int main() {
string tmp_string = "This will be converted to char*\n";
string mod_string = "I've been overwritten";
char *tmp_ptr = &tmp_string[0];
cout << tmp_ptr;
return EXIT_SUCCESS;
}
Recadena, sin embargo, que modificar los datos en tmp_ptr también alteraría el valor de tmp_string, que puedes ver ejecutando el siguiente ejemplo de código:
#include <cstring>
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl using std::string;
int main() {
string tmp_string = "This will be converted to char*\n";
string mod_string = "I've been overwritten";
char *tmp_ptr = &tmp_string[0];
memmove(tmp_ptr, mod_string.c_str(), mod_string.length());
cout << tmp_string;
return EXIT_SUCCESS;
}
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn FacebookArtículo relacionado - C++ String
- Encuentre el primer carácter repetido en una cadena en C++
- Encuentre la subcadena común más larga en C++
- Poner en mayúscula la primera letra de una cadena en C++
- Comparación de cadenas y caracteres en C++
- Eliminar el último carácter de una cadena en C++
- Obtener el último carácter de una cadena en C++
