Espacios de nombres
Variantes
Acciones

std::basic_string::rfind

De cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::basic_string
 
(1)
size_type rfind(const basic_string& str, size_type pos = npos )const;
(hasta C++11)
size_type rfind(const basic_string& str,
                 size_type pos = npos )constnoexcept;
(desde C++11)
(hasta C++20)
constexpr size_type rfind(const basic_string& str,
                           size_type pos = npos )constnoexcept;
(desde C++20)
(2)
size_type rfind(const CharT* s, size_type pos, size_type count )const;
(hasta C++20)
constexpr size_type rfind(const CharT* s,
                           size_type pos, size_type count )const;
(desde C++20)
(3)
size_type rfind(const CharT* s, size_type pos = npos )const;
(hasta C++20)
constexpr size_type rfind(const CharT* s, size_type pos = npos )const;
(desde C++20)
(4)
size_type rfind( CharT ch, size_type pos = npos )const;
(hasta C++11)
size_type rfind( CharT ch, size_type pos = npos )constnoexcept;
(desde C++11)
(hasta C++20)
constexpr size_type rfind( CharT ch, size_type pos = npos )constnoexcept;
(desde C++20)
(5)
template<class T >

size_type

    rfind(const T& t, size_type pos = npos )constnoexcept(/* véase más abajo */);
(desde C++17)
(hasta C++20)
template<class T >

constexpr size_type

    rfind(const T& t, size_type pos = npos )constnoexcept(/* véase más abajo */);
(desde C++20)

Encuentra la última 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 suceda a pos. Si se pasa npos o cualquier valor que no sea más pequeño que size()-1 como pos, se buscará la cadena completa.

1) Encuentra la última subcadena igual a str.
2) Encuentra la última subcadena igual al rango [s, s+count). Este rango puede contener caracteres nulos.
3) Encuentra la última 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 último carácter ch.
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 al contenido de 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.

En todos los casos, se comprueba la igualdad llamando a Traits::eq.

Contenido

[editar]Parameters

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]Return value

Posición del primer carácter de la subcadena encontrada o npos si no se encontró dicha subcadena. Observa que esto es un desplazamiento desde el inicio de la cadena, no desde el final.

Si lo que se busca es una cadena vacía (str.size(), count, o Traits::length(s) es cero), devuelve pos (la cadena vacía se encuentra inmediatemente) a menos que pos > size() (incluyendo el caso donde pos == npos), en cuyo caso devuelve size().

De lo contrario, si size() es cero, siempre se devuelve npos.

[editar]Excepciones

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 imprimir(std::string::size_type n, std::stringconst&s){if(n ==std::string::npos){std::cout<<"no se encuentra\n";}else{std::cout<<"se encuentra: \""<< s.substr(n)<<"\" en "<< n <<'\n';}}   int main(){ std::string::size_type n;std::stringconst s ="esto es una cadena";   // buscar al revés desde el final de la cadena n = s.rfind("es"); imprimir(n, s);// buscar al revés desde la posición 4 n = s.rfind("es", 4); imprimir(n, s);// encuentra un solo carácter  n = s.rfind('c'); imprimir(n, s);// encuentra un solo carácter n = s.rfind('q'); imprimir(n, s);}

Salida:

se encuentra: "es una cadena" en 5 se encuentra: "esto es una cadena" en 0 se encuentra: "cadena" en 12 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éaase también

Encuentra caracteres en la cadena
(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]
close