Namespaces
Variants

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

De fr.cppreference.net
 
 
 
std::basic_string
 
size_type find_last_not_of( const basic_string& str,
                            size_type pos = npos ) const;
(1) (noexcept depuis C++11)
(constexpr depuis C++20)
size_type find_last_not_of( const CharT* s,
                            size_type pos, size_type count ) const;
(2) (constexpr depuis C++20)
size_type find_last_not_of( const CharT* s, size_type pos = npos ) const;
(3) (constexpr depuis C++20)
size_type find_last_not_of( CharT ch, size_type pos = npos ) const;
(4) (noexcept depuis C++11)
(constexpr depuis C++20)
template< class StringViewLike >
size_type
    find_last_not_of( const StringViewLike& t,
                      size_type pos = npos ) const noexcept(/* see below */);
(5) (depuis C++17)
(constexpr depuis C++20)

Trouve le dernier caractère qui n'est égal à aucun des caractères de la séquence de caractères donnée. La recherche ne considère que la plage [0pos]. Si tous les caractères de la plage peuvent être trouvés dans la séquence de caractères donnée, npos sera retourné.

1) Trouve le dernier caractère qui n'est égal à aucun des caractères de str.
2) Trouve le dernier caractère qui n'est égal à aucun des caractères de la plage [ss + count). Cette plage peut inclure des caractères nuls.
Si [ss + count) n'est pas une plage valide, le comportement est indéfini.
3) Trouve le dernier caractère qui n'est égal à aucun des caractères de la chaîne de caractères pointée par s. La longueur de la chaîne est déterminée par le premier caractère nul en utilisant Traits::length(s).
Si [ss + Traits::length(s)) n'est pas une plage valide, le comportement est indéfini.
4) Trouve le dernier caractère différent de ch.
5) Convertit implicitement t en une vue chaîne sv comme par std::basic_string_view<CharT, Traits> sv = t;, puis trouve le dernier caractère qui n'est égal à aucun des caractères de sv.
Cette surcharge ne participe à la résolution de surcharge que si std::is_convertible_v<const StringViewLike&,
std::basic_string_view<CharT, Traits>>
est true et que std::is_convertible_v<const StringViewLike&, const CharT*> est false.

Dans tous les cas, l'égalité est vérifiée en appelant Traits::eq.

Paramètres

str - chaîne identifiant les caractères à rechercher
pos - position à laquelle terminer la recherche
count - longueur de la chaîne de caractères identifiant les caractères à rechercher
s - pointeur vers une chaîne de caractères identifiant les caractères à rechercher
ch - caractère identifiant les caractères à rechercher
t - objet (convertible en std::basic_string_view ) identifiant les caractères à rechercher

Valeur de retour

Position du caractère trouvé ou npos si aucun caractère n'est trouvé.

Exceptions

1,4) Ne lance rien.
5)
noexcept spécification :
noexcept ( std:: is_nothrow_convertible_v <
const T & , std:: basic_string_view < CharT, Traits >> )

Si une exception est levée pour quelque raison que ce soit, cette fonction n'a aucun effet ( garantie forte de sûreté face aux exceptions ).

Exemple

#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
}

Sortie :

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

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement publié Comportement corrigé
LWG 141 C++98 la surcharge (1) ne pouvait retourner que npos si pos >= size ( ) la plage de recherche est
[ 0 , size ( ) ) dans ce cas
LWG 847 C++98 il n'y avait aucune garantie de sûreté des exceptions garantie de sûreté forte des exceptions ajoutée
LWG 2064 C++11 les surcharges (3,4) étaient noexcept supprimé
LWG 2946 C++17 la surcharge (5) causait une ambiguïté dans certains cas évité en la rendant template
P1148R0 C++11
C++17
noexcept pour les surcharges (4,5) a été
accidentellement supprimé par LWG2064/LWG2946
restauré

Voir aussi

trouve la première occurrence de la sous-chaîne donnée
(fonction membre publique)
trouve la dernière occurrence d'une sous-chaîne
(fonction membre publique)
trouve la première occurrence de caractères
(fonction membre publique)
trouve la première absence de caractères
(fonction membre publique)
trouve la dernière occurrence de caractères
(fonction membre publique)
trouve la dernière absence de caractères
(fonction membre publique de std::basic_string_view<CharT,Traits> )