Namensräume
Varianten
Aktionen

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

Von cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
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(/* siehe unten */);
(5) (seit C++17)
(constexpr seit C++20)

Sucht die erste Teilzeichenkette, die mit der gegebenen Zeichensequenz übereinstimmt. Die Suche beginnt bei Position pos, d.h. die gefundene Teilzeichenkette darf nicht an einer Position davor beginnen.

1) Sucht die erste Teilzeichenkette, die mit str übereinstimmt.
2) Sucht die erste Teilzeichenkette, die mit dem Bereich [ss + count) übereinstimmt. Dieser Bereich darf Nullzeichen enthalten.
Wenn [ss + count) kein gültiger Bereich ist, ist das Verhalten undefiniert.
3) Sucht die erste Teilzeichenkette, die mit der von s zeigenden Zeichenkette übereinstimmt. Die Länge der Zeichenkette wird durch das erste Nullzeichen mittels Traits::length(s) bestimmt.
Wenn [ss + Traits::length(s)) kein gültiger Bereich ist, ist das Verhalten undefiniert.
4) Sucht das erste Zeichen ch (das gemäß den formalen Regeln unten als Teilzeichenkette der Länge eins behandelt wird).
5) Konvertiert t implizit in eine String-Ansicht sv, als ob durch std::basic_string_view<CharT, Traits> sv = t;, und sucht dann die erste Teilzeichenkette, die mit sv übereinstimmt.
Dieser Überladungsschlüssel 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 ausgedrückt wird eine Teilzeichenkette str an der Position xpos als *gefunden* bezeichnet, wenn alle folgenden Bedingungen erfüllt sind:

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

Insbesondere impliziert dies, dass

  • eine Teilzeichenkette nur gefunden werden kann, wenn pos <= size() - str.size()
  • eine leere Teilzeichenkette an Position pos gefunden wird, wenn und nur wenn pos <= size()
  • für eine nicht-leere Teilzeichenkette gilt: Wenn pos >= size(), gibt die Funktion immer npos zurück.

Inhalt

[bearbeiten] Parameter

str - Zu durchsuchende Zeichenkette
pos - Position, an der die Suche beginnen soll
zählt - Länge der zu durchsuchenden Teilzeichenkette
s - Zeiger auf eine zu durchsuchende Zeichenkette
ch - Zu durchsuchendes Zeichen
t - Zu durchsuchendes Objekt (konvertierbar in std::basic_string_view)

[bearbeiten] Rückgabewert

Position des ersten Zeichens der gefundenen Teilzeichenkette oder npos, wenn keine solche Teilzeichenkette gefunden wird.

[bearbeiten] 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 Ausnahme ausgelöst wird, hat diese Funktion keine Auswirkungen (starkes Ausnahmesicherheitsgarantie).

[bearbeiten] 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          */
 
    // search from beginning of string
    n = s.find("is");
    print(1, n, s);
 
    // search from position 5
    n = s.find("is", 5);
    print(2, n, s);
 
    // find a single character
    n = s.find('a');
    print(3, n, s);
 
    // find a single character
    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

[bearbeiten] 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 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 von LWG2064/LWG2946 fallen gelassen
wiederhergestellt

[bearbeiten] Siehe auch

findet das erste Vorkommen eines Teilstrings von Zeichen
(Funktion) [bearbeiten]
findet das erste Vorkommen einer breiten Zeichenkette innerhalb einer anderen breiten Zeichenkette
(Funktion) [bearbeiten]
findet das erste Vorkommen eines Zeichens
(Funktion) [bearbeiten]
findet das erste Vorkommen eines breiten Zeichens in einer breiten Zeichenkette
(Funktion) [bearbeiten]
sucht das letzte Vorkommen einer Teilzeichenkette
(public member function) [edit]
findet das erste Vorkommen von Zeichen
(public member function) [edit]
findet das erste Fehlen von Zeichen
(public member function) [edit]
findet das letzte Vorkommen von Zeichen
(public member function) [edit]
findet das letzte Fehlen von Zeichen
(public member function) [edit]
sucht Zeichen in der Ansicht
(public member function of std::basic_string_view<CharT,Traits>) [bearbeiten]
Sucht nach dem ersten Vorkommen eines Elementbereichs
(Funktionstempelat) [edit]