std::basic_string<CharT,Traits,Allocator>:: substr
| (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()
)
.
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>
)
|