Namespaces
Variants

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

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

size_type
find_last_not_of ( const StringViewLike & t,

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

Encuentra el último carácter diferente a cualquiera de los caracteres en la secuencia de caracteres dada. La búsqueda considera solo el rango [ 0 , pos ] . Si todos los caracteres en el rango se encuentran en la secuencia de caracteres dada, npos será retornado.

1) Encuentra el último carácter que no es igual a ninguno de los caracteres en str .
2) Encuentra el último carácter que no es igual a ninguno de los caracteres en el 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 el último carácter que no es igual a ninguno de los caracteres en 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 que no es igual a ch .
5) Convierte implícitamente t a una string view sv como si fuera mediante std:: basic_string_view < CharT, Traits > sv = t ; , luego encuentra el último carácter que no es igual a ninguno de los caracteres en 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 que identifica los caracteres a buscar
pos - posición en la que finalizar la búsqueda
count - longitud de la cadena de caracteres que identifica los caracteres a buscar
s - puntero a una cadena de caracteres que identifica los caracteres a buscar
ch - carácter que identifica los caracteres a buscar
t - objeto (convertible a std::basic_string_view ) que identifica los caracteres a buscar

Valor de retorno

Posición del carácter encontrado o npos si no se encuentra dicho carácter.

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 <iostream>
#include <string>
void show_pos(const std::string& str, std::string::size_type found)
{
    if (found != std::string::npos)
        std::cout << '[' << found << "] = \'" << str[found] << "\'\n";
    else
        std::cout << "not found\n";
}
int main()
{
    std::string str{"abc_123"};
    char const* skip_set{"0123456789"};
    std::string::size_type str_last_pos{std::string::npos};
    show_pos(str, str.find_last_not_of(skip_set)); // [3] = '_'
    str_last_pos = 2;
    show_pos(str, str.find_last_not_of(skip_set, str_last_pos)); // [2] = 'c'
    str_last_pos = 2;
    show_pos(str, str.find_last_not_of('c', str_last_pos)); // [1] = 'b'
    const char arr[]{'3', '4', '5'};
    show_pos(str, str.find_last_not_of(arr)); // [5] = '2'
    str_last_pos = 2;
    std::string::size_type skip_set_size{4};
    show_pos(str, str.find_last_not_of(skip_set,
                                       str_last_pos,
                                       skip_set_size)); // [2] = 'c'
    show_pos(str, str.find_last_not_of("abc")); // [6] = '3'
    str_last_pos = 2;
    show_pos(str, str.find_last_not_of("abc", str_last_pos)); // not found
}

Salida:

[3] = '_'
[2] = 'c'
[1] = 'b'
[5] = '2'
[2] = 'c'
[6] = '3'
not found

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 141 C++98 la sobrecarga (1) solo podía retornar npos si pos >= size ( ) el rango de búsqueda es
[ 0 , size ( ) ) en este caso
LWG 847 C++98 no existía garantía de seguridad de excepciones se añadió garantía de seguridad de excepciones fuerte
LWG 2064 C++11 las sobrecargas (3,4) eran noexcept eliminado
LWG 2946 C++17 la sobrecarga (5) causaba ambigüedad en algunos casos evitado al convertirla en plantilla
P1148R0 C++11
C++17
noexcept para las sobrecargas (4,5) fueron
eliminadas accidentalmente por LWG2064/LWG2946
restaurado

Véase también

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