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