std::basic_string::find_last_not_of
De cppreference.com
<tbody>
</tbody>
<tbody class="t-dcl-rev t-dcl-rev-num ">
</tbody><tbody>
</tbody>
<tbody class="t-dcl-rev t-dcl-rev-num ">
</tbody><tbody>
</tbody>
<tbody class="t-dcl-rev t-dcl-rev-num ">
</tbody><tbody>
</tbody>
<tbody class="t-dcl-rev t-dcl-rev-num ">
</tbody><tbody>
</tbody>
<tbody class="t-dcl-rev t-dcl-rev-num ">
</tbody><tbody>
</tbody>
| (1) | ||
size_type find_last_not_of( const basic_string& str, size_type pos = npos ) const; |
(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) | |
| (2) | ||
size_type find_last_not_of( const CharT* s, size_type pos, size_type count ) const; |
(hasta C++20) | |
constexpr size_type find_last_not_of( const CharT* s, size_type pos, size_type count ) const; |
(desde C++20) | |
| (3) | ||
size_type find_last_not_of( const CharT* s, size_type pos = npos ) const; |
(hasta C++20) | |
constexpr size_type find_last_not_of( const CharT* s, size_type pos = npos ) const; |
(desde C++20) | |
| (4) | ||
size_type find_last_not_of( CharT ch, size_type pos = npos ) const; |
(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) | |
| (5) | ||
template < class T > size_type find_last_not_of( const T& t, size_type pos = npos ) const noexcept(/* véase más abajo */); |
(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)
<tbody>
</tbody>
noexcept(std::is_nothrow_convertible_v<const T&, std::basic_string_view<charT, traits>>) |
||
Ejemplo
Ejecuta este código
#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) |