Espacios de nombres
Variantes
Acciones
 
 
 
std::basic_string
 
size_type find_last_not_of( const basic_string& str, size_type pos = npos ) const;
(1) (hasta C++11)
size_type find_last_not_of( const basic_string& str, size_type pos = npos ) const noexcept;
(desde C++11)
(hasta C++20)
constexpr size_type find_last_not_of( const basic_string& str, size_type pos = npos ) const noexcept;
(desde C++20)
size_type find_last_not_of( const CharT* s, size_type pos, size_type count ) const;
(2) (hasta C++20)
constexpr size_type find_last_not_of( const CharT* s, size_type pos, size_type count ) const;
(desde C++20)
size_type find_last_not_of( const CharT* s, size_type pos = npos ) const;
(3) (hasta C++20)
constexpr size_type find_last_not_of( const CharT* s, size_type pos = npos ) const;
(desde C++20)
size_type find_last_not_of( CharT ch, size_type pos = npos ) const;
(4) (hasta C++11)
size_type find_last_not_of( CharT ch, size_type pos = npos ) const noexcept;
(desde C++11)
(hasta C++20)
constexpr size_type find_last_not_of( CharT ch, size_type pos = npos ) const noexcept;
(desde C++20)
template < class T > size_type find_last_not_of( const T& t, size_type pos = npos ) const noexcept(/* véase más abajo */);
(5) (desde C++17)
(hasta C++20)
template < class T > constexpr size_type find_last_not_of( const T& t, size_type pos = npos ) const noexcept(/* véase más abajo */);
(desde C++20)

Encuentra el último carácter que no es igual a ninguno de los caracteres en la secuencia de caracteres dada. La búsqueda considera solamente el intervalo [0, pos]. Si el carácter no está presente en el intervalo, se devuelve npos.

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 contener caracteres nulos.
3) Encuentra el último carácter que no es igual a ninguno de los caracteres en 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 que no es igual a 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 el último carácter que no es igual a ninguno de los caracteres en 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.

Parámetros

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

Valor de retorno

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

Excepciones

5)
Especificación noexcept:   (desde C++11)
noexcept(std::is_nothrow_convertible_v<const T&, std::basic_string_view<charT, traits>>)

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 << "no se encuentra" "\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)); // no se encuentra
}

Salida:

[3] = '_'
[2] = 'c'
[1] = 'b'
[5] = '2'
[2] = 'c'
[6] = '3'
no se encuentra

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ó.

Véase también

Encuentra caracteres en la cadena
(función miembro pública)
Encuentra la última aparición de una subcadena
(función miembro pública)
Encuentra la primera aparición de caracteres
(función miembro pública)
Encuentra la primera ausencia de caracteres
(función miembro pública)
Encuentra la última aparición de caracteres
(función miembro pública)