Namespaces
Variants

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

From cppreference.net
std::basic_string
size_type rfind ( const basic_string & str, size_type pos = npos ) const ;
(1) (noexcept desde C++11)
(constexpr desde C++20)
size_type rfind ( const CharT * s, size_type pos, size_type count ) const ;
(2) (constexpr desde C++20)
size_type rfind ( const CharT * s, size_type pos = npos ) const ;
(3) (constexpr desde C++20)
size_type rfind ( CharT ch, size_type pos = npos ) const ;
(4) (noexcept desde C++11)
(constexpr desde C++20)
template < class StringViewLike >

size_type rfind ( const StringViewLike & t,

size_type pos = npos ) const noexcept ( /* ver más abajo */ ) ;
(5) (desde C++17)
(constexpr desde C++20)

Encuentra la última subcadena que es igual a la secuencia de caracteres dada. La búsqueda comienza en pos y procede de derecha a izquierda (por lo tanto, la subcadena encontrada, si existe, no puede comenzar en una posición posterior a pos ). Si se pasa npos o cualquier valor no menor que size() - 1 como pos , se buscará en toda la cadena.

1) Encuentra la última subcadena igual a str .
2) Encuentra la última subcadena igual al rango [ s , s + count ) . Este rango puede incluir caracteres nulos.
Si [ s , s + count ) no es un rango válido , el comportamiento es indefinido.
3) Encuentra la última 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 último carácter igual a ch .
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 última subcadena igual al contenido de 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 .

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

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. Nótese que este es un desplazamiento desde el inicio de la cadena, no desde el final.

Si se busca una cadena vacía (es decir, str. size ( ) , count , o Traits :: length ( s ) es cero), la cadena vacía se encuentra inmediatamente y rfind devuelve:

  • pos , si pos < size ( ) ;
  • size ( ) en caso contrario, incluyendo el caso donde pos == npos .

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

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(std::string::size_type n,
           std::string::size_type len,
           std::string const &s)
{
    if (n == std::string::npos)
        std::cout << "not found\n";
    else
        std::cout << "found: " << std::quoted(s.substr(n, len)) << " at " << n << '\n';
}
int main()
{
    std::string::size_type n;
    std::string const s = "This is a string";
    // búsqueda hacia atrás desde el final de la cadena
    n = s.rfind("is");
    print(n, 2, s);
    // búsqueda hacia atrás desde la posición 4
    n = s.rfind("is", 4);
    print(n, 2, s);
    // encontrar un solo carácter
    n = s.rfind('s');
    print(n, 1, s);
    // encontrar un solo carácter
    n = s.rfind('q');
    print(n, 1, s);
    // encontrar el prefijo (ver también s.starts_with("This"))
    n = s.rfind("This", 0);
    print(n, 4, s);
}

Salida:

found: "is" at 5
found: "is" at 2
found: "s" at 10
not found
found: "This" at 0

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 la subcadena dada
(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 la última ocurrencia de una subcadena
(función miembro pública de std::basic_string_view<CharT,Traits> )