Namensräume
Varianten
Aktionen

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

Von cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::basic_string
 
size_type rfind( const basic_string& str, size_type pos = npos ) const;
(1) (noexcept seit C++11)
(constexpr seit C++20)
size_type rfind( const CharT* s, size_type pos, size_type count ) const;
(2) (constexpr seit C++20)
size_type rfind( const CharT* s, size_type pos = npos ) const;
(3) (constexpr seit C++20)
size_type rfind( CharT ch, size_type pos = npos ) const;
(4) (noexcept seit C++11)
(constexpr seit C++20)
template< class StringViewLike >

size_type rfind( const StringViewLike& t,

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

Findet die letzte Teilzeichenkette, die mit der gegebenen Zeichensequenz übereinstimmt. Die Suche beginnt an Position pos und verläuft von rechts nach links (daher kann die gefundene Teilzeichenkette, falls vorhanden, nicht an einer Position beginnen, die nach pos liegt). Wenn npos oder ein Wert, der nicht kleiner als size() - 1 ist, als pos übergeben wird, wird die gesamte Zeichenkette durchsucht.

1) Findet die letzte Teilzeichenkette, die mit str übereinstimmt.
2) Findet die letzte Teilzeichenkette, die mit dem Bereich [ss + count) übereinstimmt. Dieser Bereich kann Nullzeichen enthalten.
Wenn [ss + count) kein gültiger Bereich ist, ist das Verhalten undefiniert.
3) Findet die letzte Teilzeichenkette, die mit der von s bezeichneten 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) Findet das letzte Zeichen, das mit ch übereinstimmt.
5) Konvertiert t implizit in eine String-Ansicht sv, als ob durch std::basic_string_view<CharT, Traits> sv = t;, und findet dann die letzte Teilzeichenkette, die mit dem Inhalt von sv übereinstimmt.
Diese Überladung nimmt an der Überladungsauflösung teil, nur 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 geprüft.

Inhalt

[edit] 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)

[edit] Rückgabewert

Position des ersten Zeichens der gefundenen Teilzeichenkette oder npos, wenn keine solche Teilzeichenkette gefunden wurde. Beachten Sie, dass dies ein Offset vom Anfang der Zeichenkette ist, nicht vom Ende.

Wenn nach einer leeren Zeichenkette gesucht wird (d. h. str.size(), count oder Traits::length(s) null ist), wird die leere Zeichenkette sofort gefunden und rfind gibt zurück:

  • pos, wenn pos < size();
  • size() andernfalls, einschließlich des Falls, dass pos == npos.

Andernfalls, wenn size() null ist, wird immer npos zurückgegeben.

[edit] 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).

[edit] Beispiel

#include <iomanip>
#include <iostream>
#include <string>
 
void print(std::string::size_type n,
           std::string::size_type len,
           std::string const &s)
{
    if (n == std::string::npos)
        std::cout << "not found\n";
    else
        std::cout << "found: " << std::quoted(s.substr(n, len)) << " at " << n << '\n';
}
 
int main()
{
    std::string::size_type n;
    std::string const s = "This is a string";
 
    // search backwards from end of string
    n = s.rfind("is");
    print(n, 2, s);
 
    // search backwards from position 4
    n = s.rfind("is", 4);
    print(n, 2, s);
 
    // find a single character
    n = s.rfind('s');
    print(n, 1, s);
 
    // find a single character
    n = s.rfind('q');
    print(n, 1, s);
 
    // find the prefix (see also s.starts_with("This"))
    n = s.rfind("This", 0);
    print(n, 4, s);
}

Ausgabe

found: "is" at 5
found: "is" at 2
found: "s" at 10
not found
found: "This" at 0

[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 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) [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 das letzte Vorkommen einer Teilzeichenkette
(öffentliche Memberfunktion von std::basic_string_view<CharT,Traits>) [edit]