std::basic_string<CharT,Traits,Allocator>::substr
basic_string substr( size_type pos = 0, size_type count = npos ) const;
|
(1) | (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, el count es mayor que size() - pos (por ejemplo, si count == npos), la subcadena devuelta es [pos, size()).
return basic_string(*this, pos, count);.return basic_string(std::move(*this), pos, count);.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
constexpr size_type npos [static]
|
el valor especial size_type(-1), cuyo significado exacto depende del contexto
|
(C++26) |
devuelve una subvista (función miembro pública) |
| copia caracteres (función miembro pública) | |
| devuelve el número de caracteres (función miembro pública) | |
| encuentra la primera aparición de la subcadena dada (función miembro pública) | |
| devuelve una subcadena (función miembro pública de std::basic_string_view<CharT,Traits>)
|