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,
|
(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 .
[
s
,
s
+
count
)
. Este rango puede contener caracteres nulos.
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 todas las siguientes condiciones son true :
- xpos >= pos
- xpos + str. size ( ) <= size ( )
- para todas las posiciones n en str , 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 pos si y solo si pos <= size ( )
- para una subcadena no vacía, si pos >= size ( ) , la función siempre retorna npos .
Contenidos |
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) |