cpp-como-usar-std-string

Cómo usar std::string en C++

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

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.