Namespaces
Variants

std::basic_string<CharT,Traits,Allocator>:: substr

From cppreference.net
std::basic_string
(1)
basic_string substr ( size_type pos = 0 , size_type count = npos ) const ;
(hasta C++23)
(constexpr desde C++20)
constexpr basic_string
substr ( size_type pos = 0 , size_type count = npos ) const & ;
(desde C++23)
constexpr basic_string substr ( size_type pos = 0 , size_type count = npos ) && ;
(2) (desde C++23)

Devuelve una subcadena [ pos , pos + count ) . Si la subcadena solicitada se extiende más allá del final de la cadena, es decir, si count es mayor que size ( ) - pos (por ejemplo, si count == npos ), la subcadena devuelta es [ pos , size() ) .

1) Equivalente a return basic_string ( * this, pos, count ) ; .
2) Equivalente a return basic_string ( std :: move ( * this ) , pos, count ) ; .

Contenidos

Parámetros

pos - posición del primer carácter a incluir
count - longitud de la subcadena

Valor de retorno

Cadena que contiene la subcadena [ pos , pos + count ) o [ pos , size() ) .

Excepciones

std::out_of_range si pos > size ( ) .

Si se lanza una excepción por cualquier razón, estas funciones no tienen efecto ( strong exception safety guarantee ).

Complejidad

Lineal en count .

Notas

El asignador de la cadena devuelta se construye por defecto: el nuevo asignador podría no ser una copia de get_allocator() .

Ejemplo

#include <iostream>
#include <string>
int main()
{
    std::string a = "0123456789abcdefghij";
    // count es npos, retorna [pos, size())
    std::string sub1 = a.substr(10);
    std::cout << sub1 << '\n';
    // tanto pos como pos + count están dentro de los límites, retorna [pos, pos + count)
    std::string sub2 = a.substr(5, 3);
    std::cout << sub2 << '\n';
    // pos está dentro de los límites, pos + count no lo está, retorna [pos, size())
    std::string sub4 = a.substr(a.size() - 3, 50);
    // esto es efectivamente equivalente a
    // std::string sub4 = a.substr(17, 3);
    // ya que a.size() == 20, pos == a.size() - 3 == 17, y a.size() - pos == 3
    std::cout << sub4 << '\n';
    try
    {
        // pos está fuera de los límites, lanza excepción
        std::string sub5 = a.substr(a.size() + 3, 50);
        std::cout << sub5 << '\n';
    }
    catch (const std::out_of_range& ex)
    {
        std::cout << ex.what() << '\n';
    }
}

Salida posible:

abcdefghij
567
hij
basic_string::substr: __pos (which is 23) > this->size() (which is 20)

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 847 C++98 no había garantía de seguridad de excepciones se añadió garantía de seguridad de excepciones fuerte

Véase también

copia caracteres
(función miembro pública)
devuelve el número de caracteres
(función miembro pública)
encuentra la primera ocurrencia de la subcadena dada
(función miembro pública)
constexpr size_type npos [static] el valor especial size_type ( - 1 ) , su significado exacto depende del contexto
devuelve una subcadena
(función miembro pública de std::basic_string_view<CharT,Traits> )