Namespaces
Variants

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

Depuis fr.cppreference.net
 
 
 
std::basic_string
 
basic_string substr( size_type pos = 0, size_type count = npos ) const;
(1) (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 [pospos + count). Si la sous-chaîne demandée dépasse la fin de la chaîne, c'est-à-dire si le count est supérieur à size() - pos (par exemple si count == npos), la sous-chaîne retournée est [possize()).

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

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

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