Namespaces
Variants

std::basic_string<CharT,Traits,Allocator>:: find

From cppreference.net
std::basic_string
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 ( /* ver más abajo */ ) ;
(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 .

1) Encuentra la primera subcadena igual a str .
2) Encuentra la primera subcadena igual al rango [ s , s + count ) . Este rango puede contener caracteres nulos.
Si [ s , s + count ) no es un rango válido , el comportamiento es indefinido.
3) Encuentra la primera subcadena igual a la cadena de caracteres apuntada por s . La longitud de la cadena se determina por el primer carácter nulo usando Traits :: length ( s ) .
Si [ s , s + Traits :: length ( s ) ) no es un rango válido , el comportamiento es indefinido.
4) Encuentra el primer carácter ch (tratado como una subcadena de un solo carácter según las reglas formales siguientes).
5) Convierte implícitamente t a una vista de cadena sv como si fuera mediante std:: basic_string_view < CharT, Traits > sv = t ; , luego encuentra la primera subcadena igual a sv .
Esta sobrecarga participa en la resolución de sobrecarga solo si 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 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

1,4) No lanza nada.
5)
noexcept especificación:
noexcept ( std:: is_nothrow_convertible_v < const T & , std:: basic_string_view < CharT, Traits >> )

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)