Namespaces
Variants

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

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

Findet das erste Zeichen, das keinem der Zeichen in der angegebenen Zeichensequenz entspricht. Die Suche berücksichtigt nur den Bereich [pos, size()). Wenn alle Zeichen in diesem Bereich in der angegebenen Zeichensequenz gefunden werden können, wird npos zurückgegeben.

1) Findet das erste Zeichen, das keinem der Zeichen in str entspricht.
2) Findet das erste Zeichen, das keinem der Zeichen im Bereich [s, s + count) entspricht. Dieser Bereich kann Nullzeichen enthalten.
Wenn [s, s + count) kein gültiger Bereich ist, ist das Verhalten undefiniert.
3) Findet das erste Zeichen, das keinem der Zeichen in der Zeichenkette entspricht, auf die s zeigt. Die Länge der Zeichenkette wird durch das erste Nullzeichen mit Traits::length(s) bestimmt.
Wenn [s, s + Traits::length(s)) kein gültiger Bereich ist, ist das Verhalten undefiniert.
4) Findet das erste Zeichen, das nicht gleich ch ist.
5) Konvertiert t implizit in eine string_view sv wie durch std::basic_string_view<CharT, Traits> sv = t;, und findet dann das erste 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 die Gleichheit durch Aufruf von Traits::eq überprüft.

Parameter

str - Zeichenkette, die die zu suchenden Zeichen identifiziert
pos - Startposition für die Suche
count - Länge der Zeichenkette, die die zu suchenden Zeichen identifiziert
s - Zeiger auf eine Zeichenkette, die die zu suchenden Zeichen identifiziert
ch - Zeichen, das die zu suchenden Zeichen identifiziert
t - Objekt (konvertierbar zu std::basic_string_view ), das die zu suchenden Zeichen identifiziert

Rückgabewert

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

Ausnahmen

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>
int main()
{
    // Großbuchstaben, Kleinbuchstaben und Zahlen in Makronamen erlauben
    const char* pattern = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
                          "abcdefghijklmnopqrstuvwxyz"
                          "0123456789";
    std::string data = "1) %FIX, 2) %HACK, and 3) %TODO";
    const std::string replacement = "%DONE%";
    std::cout << "Before: " << data << '\n';
    for (std::string::size_type first{}, last{};
        (first = data.find('%', first)) != std::string::npos;
        first += replacement.size())
    {
        last = data.find_first_not_of(pattern, first + 1);
        if (last == std::string::npos)
            last = data.length();
        // Jetzt ist first bei '%' und last ist eine Position nach dem Ende des gefundenen Teilstrings
        data.replace(first, last - first, replacement);
    }
    std::cout << "After: " << data << '\n';
}

Ausgabe:

Before: 1) %FIX, 2) %HACK, and 3) %TODO
After: 1) %DONE%, 2) %DONE%, and 3) %DONE%

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 847 C++98 es gab keine Exception-Sicherheitsgarantie starke Exception-Sicherheitsgarantie 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 letzte Vorkommen von Zeichen
(öffentliche Elementfunktion)
findet das letzte Nicht-Vorkommen von Zeichen
(öffentliche Elementfunktion)
findet das erste Nicht-Vorkommen von Zeichen
(öffentliche Elementfunktion von std::basic_string_view<CharT,Traits> )