std::basic_string<CharT,Traits,Allocator>::rfind
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(/* see below */);
|
(5) | (seit C++17) (constexpr seit C++20) |
Findet die letzte Teilzeichenkette, die gleich der angegebenen Zeichensequenz ist. Die Suche beginnt bei pos und verläuft von rechts nach links (daher kann die gefundene Teilzeichenkette, falls vorhanden, nicht an einer Position nach pos beginnen). Wenn npos oder ein Wert, der nicht kleiner als size()- 1 ist, als pos übergeben wird, wird die gesamte Zeichenkette durchsucht.
str ist.[s, s + count) ist. Dieser Bereich kann Nullzeichen enthalten.[s, s + count) kein gültiger Bereich ist, ist das Verhalten undefiniert.s zeigt. Die Länge der Zeichenkette wird durch das erste Nullzeichen mit Traits::length(s) bestimmt.[s, s + Traits::length(s)) kein gültiger Bereich ist, ist das Verhalten undefiniert.ch ist.t implizit in eine String-Ansicht sv wie durch std::basic_string_view<CharT, Traits> sv = t;, und findet dann die letzte Teilzeichenkette, die gleich dem Inhalt von sv ist.std::is_convertible_v<const StringViewLike&,std::basic_string_view<CharT, Traits>> ist true und std::is_convertible_v<const StringViewLike&, const CharT*> ist false ist.In allen Fällen wird die Gleichheit durch Aufruf von Traits::eq überprüft.
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. 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
)
ist null), wird die leere Zeichenkette sofort gefunden und
rfind
gibt zurück:
- pos , falls pos < size ( ) ;
- size ( ) andernfalls, einschließlich des Falls, in dem pos == npos .
Andernfalls, wenn size() null ist, wird stets npos zurückgegeben.
Ausnahmen
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(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"; // Suche rückwärts vom Ende des Strings n = s.rfind("is"); print(n, 2, s); // Suche rückwärts von Position 4 n = s.rfind("is", 4); print(n, 2, s); // Finde ein einzelnes Zeichen n = s.rfind('s'); print(n, 1, s); // Finde ein einzelnes Zeichen n = s.rfind('q'); print(n, 1, s); // Finde das Präfix (siehe auch 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
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 angegebenen 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 das letzte Vorkommen einer Teilzeichenkette
(öffentliche Elementfunktion von
std::basic_string_view<CharT,Traits>
)
|