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 ;
(jusqu'à C++23)
(constexpr depuis C++20)
constexpr basic_string
substr ( size_type pos = 0 , size_type count = npos ) const & ;
(depuis C++23)
constexpr basic_string substr ( size_type pos = 0 , size_type count = npos ) && ;
(2) (depuis C++23)

Retourne une sous-chaîne [ pos , pos + count ) . Si la sous-chaîne demandée dépasse la fin de la chaîne, c'est-à-dire si count est supérieur à size ( ) - pos (par exemple si count == npos ), la sous-chaîne retournée est [ pos , size() ) .

1) Équivalent à return basic_string ( * this, pos, count ) ; .
2) Équivalent à return basic_string ( std :: move ( * this ) , pos, count ) ; .

Table des matières

Paramètres

pos - position du premier caractère à inclure
count - longueur de la sous-chaîne

Valeur de retour

Chaîne contenant la sous-chaîne [ pos , pos + count ) ou [ pos , size() ) .

Exceptions

std::out_of_range si pos > size ( ) .

Si une exception est levée pour quelque raison que ce soit, ces fonctions n'ont aucun effet ( strong exception safety guarantee ).

Complexité

Linéaire en count .

Notes

L'allocateur de la chaîne retournée est construit par défaut : le nouvel allocateur pourrait ne pas être une copie de get_allocator() .

Exemple

#include <iostream>
#include <string>
int main()
{
    std::string a = "0123456789abcdefghij";
    // count est npos, retourne [pos, size())
    std::string sub1 = a.substr(10);
    std::cout << sub1 << '\n';
    // pos et pos + count sont dans les limites, retourne [pos, pos + count)
    std::string sub2 = a.substr(5, 3);
    std::cout << sub2 << '\n';
    // pos est dans les limites, pos + count ne l'est pas, retourne [pos, size())
    std::string sub4 = a.substr(a.size() - 3, 50);
    // ceci est effectivement équivalent à
    // std::string sub4 = a.substr(17, 3);
    // puisque a.size() == 20, pos == a.size() - 3 == 17, et a.size() - pos == 3
    std::cout << sub4 << '\n';
    try
    {
        // pos est hors limites, lance une exception
        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';
    }
}

Sortie possible :

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

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement tel que publié Comportement correct
LWG 847 C++98 il n'y avait aucune garantie de sûreté des exceptions garantie de sûreté forte des exceptions ajoutée

Voir aussi

copie des caractères
(fonction membre publique)
retourne le nombre de caractères
(fonction membre publique)
trouve la première occurrence de la sous-chaîne donnée
(fonction membre publique)
constexpr size_type npos [static] la valeur spéciale size_type ( - 1 ) , sa signification exacte dépend du contexte
retourne une sous-chaîne
(fonction membre publique de std::basic_string_view<CharT,Traits> )