Namespaces
Variants

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

De es.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(/* 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.

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 no está definido.
3) Encuentra la primera subcadena igual a la cadena de caracteres apuntada por s. La longitud de la cadena se determina mediante el primer carácter nulo usando Traits::length(s).
Si [s, s + Traits::length(s)) no es un rango válido, el comportamiento no está definido.
4) Encuentra el primer carácter ch (tratado como una subcadena de un solo carácter por las reglas formales a continuación).
5) Convierte implícitamente 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.
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 se cumplen todas las siguientes condiciones 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 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

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 & objeto función de algoritmo)