std::basic_string<CharT,Traits,Allocator>::find_last_not_of
Von cppreference.com
< cpp | string | basic string
size_type find_last_not_of( const basic_string& str, size_type pos = npos ) const; |
(1) | (noexcept seit C++11) (constexpr seit C++20) |
size_type find_last_not_of( const CharT* s, size_type pos, size_type count ) const; |
(2) | (constexpr seit C++20) |
size_type find_last_not_of( const CharT* s, size_type pos = npos ) const; |
(3) | (constexpr seit C++20) |
size_type find_last_not_of( CharT ch, size_type pos = npos ) const; |
(4) | (noexcept seit C++11) (constexpr seit C++20) |
template< class StringViewLike > size_type |
(5) | (seit C++17) (constexpr seit C++20) |
Sucht das letzte Zeichen, das nicht eines der Zeichen in der gegebenen Zeichensequenz ist. Die Suche berücksichtigt nur den Bereich [0, pos]. Wenn alle Zeichen im Bereich in der gegebenen Zeichensequenz gefunden werden können, wird npos zurückgegeben.
1) Sucht das letzte Zeichen, das nicht eines der Zeichen in str ist.
2) Sucht das letzte Zeichen, das nicht eines der Zeichen im Bereich
[s, s + count) ist. Dieser Bereich kann Nullzeichen enthalten. Wenn
[s, s + count) kein gültiger Bereich ist, ist das Verhalten undefiniert.3) Sucht das letzte Zeichen, das nicht eines der Zeichen in der Zeichenkette ist, auf die s zeigt. Die Länge der Zeichenkette wird durch das erste Nullzeichen mittels Traits::length(s) bestimmt.
Wenn
[s, s + Traits::length(s)) kein gültiger Bereich ist, ist das Verhalten undefiniert.4) Sucht das letzte Zeichen, das nicht gleich ch ist.
5) Konvertiert t implizit in eine String-Ansicht sv, als ob durch std::basic_string_view<CharT, Traits> sv = t;, und sucht dann das letzte Zeichen, das nicht eines der Zeichen in sv ist.
Diese Überladung nimmt nur an der Auflösung von Überladungen 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.
std::basic_string_view<CharT, Traits>> true ist und std::is_convertible_v<const StringViewLike&, const CharT*> false ist.
In allen Fällen wird die Gleichheit durch Aufruf von Traits::eq geprüft.
Inhalt |
[edit] Parameter
| str | - | String, der die zu durchsuchenden Zeichen identifiziert |
| pos | - | position, an der die Suche beendet werden soll |
| zählt | - | Länge der Zeichenkette, die die zu durchsuchenden Zeichen identifiziert |
| s | - | Zeiger auf eine Zeichenkette, die die zu durchsuchenden Zeichen identifiziert |
| ch | - | Zeichen, das die zu suchenden Zeichen identifiziert |
| t | - | Objekt (konvertierbar zu std::basic_string_view), das die zu durchsuchenden Zeichen identifiziert |
[edit] Rückgabewert
Position des gefundenen Zeichens oder npos, wenn kein solches Zeichen gefunden wird.
[edit] Ausnahmen
1,4) Wirft nichts.
5)
noexcept-Spezifikation:
noexcept(std::is_nothrow_convertible_v<
const T&, std::basic_string_view<CharT, Traits>>)
const T&, std::basic_string_view<CharT, Traits>>)
Wenn aus irgendeinem Grund eine Ausnahme ausgelöst wird, hat diese Funktion keine Auswirkungen (starkes Ausnahmesicherheitsgarantie).
[edit] Beispiel
Führen Sie diesen Code aus
#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
[edit] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 141 | C++98 | Überladung (1) könnte nur dann npos zurückgeben, wenn pos >= size() | der Suchbereich ist[0, size()) in diesem Fall |
| 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 Mehrdeutigkeiten in einigen Fällen | vermieden durch die Erstellung als Template |
| P1148R0 | C++11 C++17 |
noexcept für Überladungen (4,5) waren versehentlich durch LWG2064/LWG2946 fallen gelassen |
wiederhergestellt |
[edit] Siehe auch
| sucht das erste Vorkommen der gegebenen Teilzeichenkette (public member function) | |
| sucht das letzte Vorkommen einer Teilzeichenkette (public member function) | |
| findet das erste Vorkommen von Zeichen (public member function) | |
| findet das erste Fehlen von Zeichen (public member function) | |
| findet das letzte Vorkommen von Zeichen (public member function) | |
| findet das letzte Fehlen von Zeichen (member function von std::basic_string_view<CharT,Traits>) |