Espacios de nombres
Variantes
Acciones

std::basic_string::find

De cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::basic_string
 
(1)
size_type find( const basic_string& str, size_type pos = 0 ) const;
(hasta C++11)
size_type find( const basic_string& str, size_type pos = 0 ) const noexcept;
(desde C++11)
(hasta C++20)
constexpr size_type find( const basic_string& str,
                          size_type pos = 0 ) const noexcept;
(desde C++20)
(2)
size_type find( const CharT* s, size_type pos, size_type count ) const;
(hasta C++20)
constexpr size_type find( const CharT* s,
                          size_type pos, size_type count ) const;
(desde C++20)
(3)
size_type find( const CharT* s, size_type pos = 0 ) const;
(hasta C++20)
constexpr size_type find( const CharT* s, size_type pos = 0 ) const;
(desde C++20)
(4)
size_type find( CharT ch, size_type pos = 0 ) const;
(hasta C++11)
size_type find( CharT ch, size_type pos = 0 ) const noexcept;
(desde C++11)
(hasta C++20)
constexpr size_type find( CharT ch, size_type pos = 0 ) const noexcept;
(desde C++20)
(5)
template < class T >
size_type find( const T& t, size_type pos = 0 ) const noexcept(/* véase más abajo */);
(desde C++17)
(hasta C++20)
template < class T >

constexpr size_type find( const T& t,

                          size_type pos = 0 ) const noexcept(/* véase más abajo */);
(desde C++20)

Encuentra la primera subcadena igual a la secuencia de caracteres dada. La búsqueda comienza en pos, p. ej., la subcadena encontrada no debe empezar en una posición que preceda 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.
3) Encuentra la primera subcadena igual a la cadena de caracteres a la que apunta s. La longitud de la cadena se determina por el primer carácter nulo usando Traits::length(s).
4) Encuentra el primer carácter ch (se trata como una subcadena de un solo carácter debido a las reglas formales explicadas más abajo).
5) Implícitamente convierte t a una vista sobre cadena sv como si fuera mediante std::basic_string_view<CharT, Traits> sv = t;, entonces encuentra la primera subcadena igual a sv. Esta sobrecarga solo participa en la resolución de sobrecargas si std::is_convertible_v<const T&, std::basic_string_view<CharT, Traits>> es true y std::is_convertible_v<const T&, const CharT*> es false.

Formalmente, una subcadena str se dice que se ha encontrado en la posición xpos si todo lo siguiente es verdadero:

  • xpos >= pos ;
  • xpos + str.size() <= size();
  • para todas las posiciones n in str, Traits::eq(at(xpos+n), str.at(n)).

En particular, esto implica que

  • una subcadena puede encontrarse solamente si pos <= size() - str.size();
  • una subcadena vacía se encuentra en la posición pos si y solo si pos <= size();
  • para una subcadena que no está vacía, si pos >= size(), la función siempre devuelve npos.

Contenido

[editar] Parámetros

str - La cadena a buscar.
pos - La posición en la cual iniciar la búsqueda.
count - La longitud de la subcadena a buscar.
s - Puntero a la cadena de caracteres a buscar.
ch - Carácter a buscar.
t - Objeto (convertible a std::basic_string_view) a buscar.

[editar] Valor de retorno

Posición del primer carácter de la subcadena encontrada o npos si no se encontró dicha subcadena.

[editar] Excepciones

2-3) No lanza nada.
5)
Especificación noexcept:   (desde C++11)
noexcept(std::is_nothrow_convertible_v<const T&, std::basic_string_view<CharT, Traits>>)

[editar] Ejemplo

#include <string>
#include <iostream>
 
void imprime(std::string::size_type n, std::string const &s)
{
    if (n == std::string::npos) {
        std::cout << "no se encuentra\n";
    } else {
        std::cout << "se encuentra: " << s.substr(n) << '\n';
    }
}
 
int main()
{
    std::string::size_type n;
    std::string const s = "esto es una cadena";
 
    // buscar desde el principio de la cadena
    n = s.find("es");
    imprime(n, s);
 
    // buscar desde la posición 5
    n = s.find("es", 5);
    imprime(n, s);
 
    // encuentra un solo carácter
    n = s.find('c');
    imprime(n, s);
 
    // encuentra un solo carácter
    n = s.find('q');
    imprime(n, s);
}

Salida:

se encuentra: esto es una cadena
se encuentra: es una cadena
se encuentra: cadena
no se encuentra

[editar] Informes de defectos

Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.

ID Aplicado a Comportamiento según lo publicado Comportamiento correcto
LWG 2064 C++11 Las sobrecargas (3) y (4) eran noexcept Se eliminó.
LWG 2946 C++17 La sobrecarga string_view causa ambigüedad en algunos casos. Se evitó haciéndola una plantilla.
P1148R0 C++11
C++17
noexcept para las sobrecargas (4)/(5) fue accidentalmente eliminado por LWG2064/LWG2946 Se restauró.

[editar] Véase también

Encuentra la primera aparición de una subcadena de caracteres
(función) [editar]
Encuentra la primera aparición de una cadena ancha dentro de otra
(función) [editar]
Encuentra la primera aparición de un carácter
(función) [editar]
Encuentra la primera aparición de un carácter ancho en una cadena ancha
(función) [editar]
Encuentra la última aparición de una subcadena
(función miembro pública) [editar]
Encuentra la primera aparición de caracteres
(función miembro pública) [editar]
Encuentra la primera ausencia de caracteres
(función miembro pública) [editar]
Encuentra la última aparición de caracteres
(función miembro pública) [editar]
Encuentra la última ausencia de caracteres
(función miembro pública) [editar]
Busca una subsecuencia de elementos.
(plantilla de función) [editar]