std::basic_string::find_last_not_of
De cppreference.com
< cpp | string | basic string
(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 )constnoexcept; | (desde C++11) (hasta C++20) | |
constexpr size_type find_last_not_of(const basic_string& str, size_type pos = npos )constnoexcept; | (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 )constnoexcept; | (desde C++11) (hasta C++20) | |
constexpr size_type find_last_not_of( CharT ch, size_type pos = npos )constnoexcept; | (desde C++20) | |
(5) | ||
template<class T > size_type | (desde C++17) (hasta C++20) | |
template<class T > constexpr size_type | (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.
Contenido |
[editar]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. |
[editar]Valor de retorno
Posición del primer carácter encontrado o npos si no se encontró dicho carácter.
[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
Ejecuta este código
#include <iostream>#include <string> void show_pos(conststd::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"};charconst* 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' constchar 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
[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é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) |