Namespaces
Variants

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

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

Findet die erste Teilzeichenkette, die der angegebenen Zeichensequenz entspricht. Die Suche beginnt bei pos, d.h. die gefundene Teilzeichenkette darf nicht an einer Position beginnen, die vor pos liegt.

1) Findet die erste Teilzeichenkette, die str entspricht.
2) Findet die erste Teilzeichenkette, die dem 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 die erste Teilzeichenkette, die der Zeichenkette entspricht, 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) Findet das erste Zeichen ch (gemäß den formalen Regeln unten als eine einzeichenlange Teilzeichenkette behandelt).
5) Konvertiert t implizit in eine String-Ansicht sv wie durch std::basic_string_view<CharT, Traits> sv = t;, und findet dann die erste Teilzeichenkette, die sv entspricht.
Diese Überladung nimmt nur 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.

Formal wird eine Teilzeichenkette str an Position als gefundenxpos bezeichnet, wenn alle folgenden Bedingungen true gilt:

  • xpos >= pos
  • xpos + str.size() <= size()
  • für alle Positionen n in str, Traits::eq(at(xpos + n), str.at(n)).

Dies impliziert insbesondere, dass

  • eine Teilzeichenkette nur gefunden werden kann, wenn pos <= size() - str.size()
  • eine leere Teilzeichenkette bei pos genau dann gefunden wird, wenn pos <= size()
  • für eine nicht-leere Teilzeichenkette, die Fall ist, wenn pos >= size() gibt die Funktion immer npos zurück.

Parameter

str - Zeichenkette, nach der gesucht werden soll
pos - Position, an der die Suche beginnen soll
count - Länge des zu suchenden Teilstrings
s - Zeiger auf eine Zeichenkette, nach der gesucht werden soll
ch - Zeichen, nach dem gesucht werden soll
t - Objekt (konvertierbar zu std::basic_string_view ), nach dem gesucht werden soll

Rückgabewert

Position des ersten Zeichens der gefundenen Teilzeichenkette oder npos falls keine solche Teilzeichenkette 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 <iomanip>
#include <iostream>
#include <string>
void print(int id, std::string::size_type n, std::string const& s)
{
    std::cout << id << ") ";
    if (std::string::npos == n)
        std::cout << "not found! n == npos\n";
    else
        std::cout << "found @ n = " << n << ", substr(" << n << ") = "
                  << std::quoted(s.substr(n)) << '\n';
}
int main()
{
    std::string::size_type n;
    std::string const s = "This is a string"; /*
                             ^  ^  ^
                             1  2  3          */
    // Suche vom Anfang des Strings
    n = s.find("is");
    print(1, n, s);
    // Suche ab Position 5
    n = s.find("is", 5);
    print(2, n, s);
    // Einzelnes Zeichen suchen
    n = s.find('a');
    print(3, n, s);
    // Einzelnes Zeichen suchen
    n = s.find('q');
    print(4, n, s);
}

Ausgabe:

1) found @ n = 2, substr(2) = "is is a string"
2) found @ n = 5, substr(5) = "is a string"
3) found @ n = 8, substr(8) = "a string"
4) not found! n == npos

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 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 einer Zeichenkette
(Funktion)
findet das erste Vorkommen einer breiten Zeichenkette in einer anderen breiten Zeichenkette
(Funktion)
findet das erste Vorkommen eines Zeichens
(Funktion)
findet das erste Vorkommen eines breiten Zeichens in einer breiten Zeichenkette
(Funktion)
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)
findet Zeichen in der Ansicht
(öffentliche Elementfunktion von std::basic_string_view<CharT,Traits>)
durchsucht die Sequenz nach dem ersten Vorkommen einer Elementfolge
(Funktionsschablone & Algorithmus-Funktionsobjekt)