std::basic_string<CharT,Traits,Allocator>::substr
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 [pos, pos + 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 [pos, size()).
return basic_string(*this, pos, count);.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>)
|