std::basic_string<CharT,Traits,Allocator>::find
size_type find( const basic_string& str, size_type pos = 0 ) const;
|
(1) | (noexcept desde C++11) (constexpr desde C++20) |
size_type find( const CharT* s, size_type pos, size_type count ) const;
|
(2) | (constexpr desde C++20) |
size_type find( const CharT* s, size_type pos = 0 ) const;
|
(3) | (constexpr desde C++20) |
size_type find( CharT ch, size_type pos = 0 ) const;
|
(4) | (noexcept desde C++11) (constexpr desde C++20) |
template< class StringViewLike >
size_type find( const StringViewLike& t,
size_type pos = 0 ) const noexcept(/* see below */);
|
(5) | (desde C++17) (constexpr desde C++20) |
Encuentra la primera subcadena igual a la secuencia de caracteres dada. La búsqueda comienza en pos, es decir, la subcadena encontrada no debe comenzar en una posición anterior a pos.
str.[s, s + count). Este rango puede contener caracteres nulos.[s, s + count) no es un rango válido, el comportamiento no está definido.s. La longitud de la cadena se determina mediante el primer carácter nulo usando Traits::length(s).[s, s + Traits::length(s)) no es un rango válido, el comportamiento no está definido.ch (tratado como una subcadena de un solo carácter por las reglas formales a continuación).t a una vista de cadena sv como si fuera por std::basic_string_view<CharT, Traits> sv = t;, luego encuentra la primera subcadena igual a sv.std::is_convertible_v<const StringViewLike&,std::basic_string_view<CharT, Traits>> es true y std::is_convertible_v<const StringViewLike&, const CharT*> es false.Formalmente, se dice que una subcadena str se encuentra en la posición xpos si se cumplen todas las siguientes condiciones true:
xpos >= posxpos + str.size() <= size()- para todas las posiciones
nenstr,Traits::eq(at(xpos + n), str.at(n)).
En particular, esto implica que
- una subcadena puede encontrarse solo si
pos <= size() - str.size() - una subcadena vacía se encuentra en
possi y solo sipos <= size() - para una subcadena no vacía, si
pos >= size(), la función siempre devuelve npos.
Parámetros
| str | - | cadena en la que buscar |
| pos | - | posición en la que comenzar la búsqueda |
| count | - | longitud de la subcadena a buscar |
| s | - | puntero a una cadena de caracteres en la que buscar |
| ch | - | carácter a buscar |
| t | - | objeto (convertible a std::basic_string_view ) a buscar |
Valor de retorno
Posición del primer carácter de la subcadena encontrada o npos si no se encuentra dicha subcadena.
Excepciones
Si se lanza una excepción por cualquier razón, esta función no tiene efecto ( strong exception safety guarantee ).
Ejemplo
#include <iomanip> #include <iostream> #include <string> void print(int id, std::string::size_type n, std::string const& s) { std::cout << id << ") "; if (std::string::npos == n) std::cout << "not found! n == npos\n"; else std::cout << "found @ n = " << n << ", substr(" << n << ") = " << std::quoted(s.substr(n)) << '\n'; } int main() { std::string::size_type n; std::string const s = "This is a string"; /* ^ ^ ^ 1 2 3 */ // búsqueda desde el inicio del string n = s.find("is"); print(1, n, s); // búsqueda desde posición 5 n = s.find("is", 5); print(2, n, s); // encontrar un carácter individual n = s.find('a'); print(3, n, s); // encontrar un carácter individual n = s.find('q'); print(4, n, s); }
Salida:
1) found @ n = 2, substr(2) = "is is a string" 2) found @ n = 5, substr(5) = "is a string" 3) found @ n = 8, substr(8) = "a string" 4) not found! n == npos
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 existía garantía de seguridad de excepciones | se añadió garantía de seguridad fuerte de excepciones |
| LWG 2064 | C++11 | las sobrecargas (3,4) eran noexcept | eliminadas |
| LWG 2946 | C++17 | la sobrecarga (5) causaba ambigüedad en algunos casos | evitada al convertirla en plantilla |
| P1148R0 |
C++11
C++17 |
noexcept para las sobrecargas
(4,5)
fue
eliminado accidentalmente por LWG2064/LWG2946 |
restaurado |
Véase también
| encuentra la primera ocurrencia de una subcadena de caracteres (función) | |
| encuentra la primera ocurrencia de una cadena ancha dentro de otra cadena ancha (función) | |
| encuentra la primera ocurrencia de un carácter (función) | |
| encuentra la primera ocurrencia de un carácter ancho en una cadena ancha (función) | |
| encuentra la última ocurrencia de una subcadena (función miembro pública) | |
| encuentra la primera ocurrencia de caracteres (función miembro pública) | |
| encuentra la primera ausencia de caracteres (función miembro pública) | |
| encuentra la última ocurrencia de caracteres (función miembro pública) | |
| encuentra la última ausencia de caracteres (función miembro pública) | |
| encuentra caracteres en la vista (función miembro pública de std::basic_string_view<CharT,Traits>)
| |
| busca la primera ocurrencia de un rango de elementos (plantilla de función & objeto función de algoritmo) | |
(C++20) |