En C++ la clase std::string
es una utilidad de la biblioteca estándar que representa y maneja cadenas de caracteres.
A diferencia de los arrays de caracteres tradicionales de C, std::string
ofrece una serie de métodos y operadores que facilitan la manipulación de cadenas de texto (como la concatenación, la búsqueda y la modificación de subcadenas).
Además, std::string
gestiona automáticamente la memoria, evitando muchos de los problemas asociados con el manejo manual de memoria.
Siempre que sea posible, debemos que preferir std::string
a una null-terminated string.
Declaración
La declaración básica de una cadena de texto es:
#include <string>
std::string nombre_cadena;
Por ejemplo una cosa así,
#include <string>
std::string saludo; // Cadena vacía
std::string nombre = "Luis"; // Inicialización con una cadena literal
Inicialización
Podemos inicializar el valor del std::string de diferentes maneras.
std::string saludo = "Hola, mundo";
std::string nombre(5, 'a'); // Inicializa con 5 caracteres 'a', es decir "aaaaa"
Operaciones básicas
Podemos concatenar cadenas usando el operador +
std::string nombre = "Luis";
std::string apellido = "Pérez";
std::string nombre_completo = nombre + " " + apellido; // "Luis Pérez"
O incluso el operador +=
std::string saludo = "Hola";
saludo += ", mundo"; // "Hola, mundo"
Podemos acceder un carácter en concreto usando el operador []
char primer_caracter = saludo[0]; // 'H'
O usando el método at
, que proporciona acceso seguro (lanza una excepción si el índice está fuera de los límites).
char primer_caracter = saludo.at(0); // 'H'
Podemos modificar cadenas usando tanto el operador []
como el método at
saludo[0] = 'h'; // "hola, mundo"
saludo.at(0) = 'H'; // "Hola, mundo"
Podemos obtener la longitud usando length
o size
std::size_t longitud = saludo.length(); // 10
Para comprar cadenas podemos usar operadores relacionales
if (nombre == "Luis") {
std::cout << "El nombre es Luis" << std::endl;
}
O el método compare
if (nombre.compare("Luis") == 0) {
std::cout << "El nombre es Luis" << std::endl;
}
Podemos buscar un texto dentro de una cadena usando find
std::size_t posicion = saludo.find("mundo"); // Devuelve 6
Podemos obtener una subcadena usando el método substr
std::string mundo = saludo.substr(6, 5); // "mundo"
Métodos y funciones
append
Añade una cadena al final de la cadena actual.
saludo.append("!!"); // "Hola, mundo!!"
insert
Inserta una cadena en una posición específica.
saludo.insert(5, "querido "); // "Hola, querido mundo"
erase
Elimina una parte de la cadena.
saludo.erase(5, 7); // "Hola, mundo"
replace
Reemplaza una parte de la cadena por otra.
saludo.replace(5, 5, "querido "); // "Hola, querido mundo"
c_str
Devuelve un puntero a una cadena de caracteres C (terminada en null).
const char* c_saludo = saludo.c_str();
empty
Comprueba si la cadena está vacía.
if (saludo.empty()) {
std::cout << "La cadena está vacía" << std::endl;
}
clear
Limpia la cadena, dejándola vacía.
saludo.clear();
Ejemplo práctico
Vamos a ver un ejemplo algo más completo para ilustrar el uso de std::string
#include <iostream>
#include <string>
int main() {
std::string nombre = "Luis";
std::string apellido = "Pérez";
std::string nombre_completo = nombre + " " + apellido;
std::cout << "Nombre completo: " << nombre_completo << std::endl;
// Modificar el nombre
nombre_completo.replace(0, 4, "Carlos");
std::cout << "Nombre modificado: " << nombre_completo << std::endl;
// Buscar y eliminar apellido
std::size_t posicion = nombre_completo.find("Pérez");
if (posicion != std::string::npos) {
nombre_completo.erase(posicion);
}
std::cout << "Sin apellido: " << nombre_completo << std::endl;
return 0;
}
En este ejemplo, vemos cómo declarar, inicializar, concatenar, modificar, buscar y eliminar partes de una std::string
.