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) (seit C++11 noexcept)
(seit C++20 constexpr)
size_type find_last_not_of ( const CharT * s,
size_type pos, size_type count ) const ;
(2) (seit C++20 constexpr)
size_type find_last_not_of ( const CharT * s, size_type pos = npos ) const ;
(3) (seit C++20 constexpr)
size_type find_last_not_of ( CharT ch, size_type pos = npos ) const ;
(4) (seit C++11 noexcept)
(seit C++20 constexpr)
template < class StringViewLike >

size_type
find_last_not_of ( const StringViewLike & t,

size_type pos = npos ) const noexcept ( /* siehe unten */ ) ;
(5) (seit C++17)
(seit C++20 constexpr)

Findet das letzte Zeichen, das keinem der Zeichen in der gegebenen Zeichenfolge entspricht. Die Suche berücksichtigt nur den Bereich [ 0 , pos ] . Wenn alle Zeichen im Bereich in der gegebenen Zeichenfolge gefunden werden können, wird npos zurückgegeben.

1) Findet das letzte Zeichen, das keinem der Zeichen in str entspricht.
2) Findet das letzte Zeichen, das keinem der Zeichen im Bereich [ s , s + count ) entspricht. Dieser Bereich kann Nullzeichen enthalten.
Falls [ s , s + count ) kein gültiger Bereich ist, ist das Verhalten undefiniert.
3) Findet das letzte Zeichen, das keinem der Zeichen in der Zeichenkette entspricht, auf die s zeigt. Die Länge der Zeichenkette wird durch das erste Nullzeichen mithilfe von Traits :: length ( s ) bestimmt.
Wenn [ s , s + Traits :: length ( s ) ) kein gültiger Bereich ist, ist das Verhalten undefiniert.
4) Findet das letzte Zeichen, das nicht gleich ch ist.
5) Konvertiert implizit t zu einem String-View sv als ob durch std:: basic_string_view < CharT, Traits > sv = t ; , findet dann das letzte Zeichen, das keinem der Zeichen in sv entspricht.
Diese Überladung nimmt nur dann an der Überladungsauflösung teil, wenn std:: is_convertible_v < const StringViewLike & ,
std:: basic_string_view < CharT, Traits >>
true ist und std:: is_convertible_v < const StringViewLike & , const CharT * > false ist.

In allen Fällen wird Gleichheit durch Aufruf von Traits::eq überprüft.

Inhaltsverzeichnis

Parameter

str - Zeichenkette, die zu suchende Zeichen identifiziert
pos - Position, an der die Suche beendet werden soll
count - Länge der Zeichenkette, die zu suchende Zeichen identifiziert
s - Zeiger auf eine Zeichenkette, die zu suchende Zeichen identifiziert
ch - Zeichen, das zu suchende Zeichen identifiziert
t - Objekt (konvertierbar zu std::basic_string_view ), das zu suchende Zeichen identifiziert

Rückgabewert

Position des gefundenen Zeichens oder npos falls kein solches Zeichen gefunden wurde.

Exceptions

1,4) Wirft nichts.
5)
noexcept Spezifikation:
noexcept ( std:: is_nothrow_convertible_v <
const T & , std:: basic_string_view < CharT, Traits >> )

Wenn aus irgendeinem Grund eine Exception ausgelöst wird, hat diese Funktion keine Wirkung ( strong exception safety guarantee ).

Beispiel

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

Ausgabe:

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

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
LWG 141 C++98 Überladung (1) konnte nur npos zurückgeben, falls pos >= size ( ) der Suchbereich ist in diesem Fall
[ 0 , size ( ) )
LWG 847 C++98 es gab keine Ausnahmesicherheitsgarantie starke Ausnahmesicherheitsgarantie hinzugefügt
LWG 2064 C++11 Überladungen (3,4) waren noexcept entfernt
LWG 2946 C++17 Überladung (5) verursachte in einigen Fällen Mehrdeutigkeit vermieden durch Template-Implementierung
P1148R0 C++11
C++17
noexcept für Überladungen (4,5) wurden
versehentlich durch LWG2064/LWG2946 entfernt
wiederhergestellt

Siehe auch

findet das erste Vorkommen der gegebenen Teilzeichenkette
(öffentliche Elementfunktion)
findet das letzte Vorkommen einer Teilzeichenkette
(öffentliche Elementfunktion)
findet das erste Vorkommen von Zeichen
(öffentliche Elementfunktion)
findet das erste Fehlen von Zeichen
(öffentliche Elementfunktion)
findet das letzte Vorkommen von Zeichen
(öffentliche Elementfunktion)
findet das letzte Fehlen von Zeichen
(öffentliche Elementfunktion von std::basic_string_view<CharT,Traits> )