std::string rfind() method
- since C++20
- since C++17
- since C++11
- until C++11
// (1) Const version only
constexpr size_type rfind( const basic_string& str, size_type pos = 0 ) const noexcept;
// (2) Const version only
constexpr size_type rfind( const CharT* s, size_type pos, size_type count ) const;
// (3) Const version only
constexpr size_type rfind( const CharT* s, size_type pos = 0 ) const;
// (4) Const version only
constexpr size_type rfind( CharT ch, size_type pos = 0 ) const noexcept;
// (5) Const version only
template < class StringViewLike >
constexpr size_type rfind( const StringViewLike& t, size_type pos = 0 ) const noexcept(/* see below */);
// (1) Const version only
size_type rfind( const basic_string& str, size_type pos = 0 ) const noexcept;
// (2) Const version only
size_type rfind( const CharT* s, size_type pos, size_type count ) const;
// (3) Const version only
size_type rfind( const CharT* s, size_type pos = 0 ) const;
// (4) Const version only
size_type rfind( CharT ch, size_type pos = 0 ) const noexcept;
// (5) Const version only
template < class StringViewLike >
size_type rfind( const StringViewLike& t, size_type pos = 0 ) const noexcept(/* see below */);
// (1) Const version only
size_type rfind( const basic_string& str, size_type pos = 0 ) const noexcept;
// (2) Const version only
size_type rfind( const CharT* s, size_type pos, size_type count ) const;
// (3) Const version only
size_type rfind( const CharT* s, size_type pos = 0 ) const;
// (4) Const version only
size_type rfind( CharT ch, size_type pos = 0 ) const noexcept;
// (1) Const version only
size_type rfind( const basic_string& str, size_type pos = 0 ) const;
// (2) Const version only
size_type rfind( const CharT* s, size_type pos, size_type count ) const;
// (3) Const version only
size_type rfind( const CharT* s, size_type pos = 0 ) const;
// (4) Const version only
size_type rfind( CharT ch, size_type pos = 0 ) const;
Finds the last substring equal to the given character sequence.
Search begins at pos
, i.e. the found substring must not begin in a position following pos
.
-
(1) Finds the last substring equal to
str
. -
(2) Finds the last substring equal to the range [ s, s + count ).
This range may contain null characters. -
(3) Finds the last substring equal to the character string pointed to by
s
.
The length of the string is determined by the last null character usingTraits::length(s)
. -
(4) Finds the last character
ch
. -
(5) Implicitly converts
t
to a string viewsv
as if bystd::basic_string_view<CharT, Traits> sv = t;
, then finds the last substring equal tosv
.Overload ResolutionThis overload participates in overload resolution only if
std::is_convertible_v<const StringViewLike&, std::basic_string_view<CharT, Traits>>
istrue
andstd::is_convertible_v<const StringViewLike&, const CharT*>
isfalse
.
If npos
or any value not smaller than size() - 1
is passed as pos, whole string will be searched.
Parameters
str
- string to search forpos
- position at which to start the searchcount
- length of substring to search fors
- pointer to a character string to search forch
- character to search fort
- object (convertible tostd::basic_string_view
) to search for
Return value
Position of the first character of the found substring or npos
if no such substring is found.
That this is an offset from the start of the string, not the end.
If searching for an empty string (str.size()
, count
, or Traits::length(s)
is zero) returns pos
(the empty string is found immediately) unless pos > size()
(including the case where pos == npos
), in which case returns size()
.
Otherwise, if size()
is zero, npos
is always returned.
Complexity
This section requires improvement. You can help by editing this doc page.
Exceptions
- (1-4) (none)
- (5) noexcept specification:
noexcept(std::is_nothrow_convertible_v<const T&, std::basic_string_view<CharT, Traits>>)
Notes
Traits::eq()
is used for comparison. By default Traits
is std::char_traits<CharT>
.
Example
#include <string>
#include <iostream>
void print(std::string::size_type n, std::string const &s)
{
if (n == std::string::npos) {
std::cout << "not found\n";
} else {
std::cout << "found: \"" << s.substr(n) << "\" 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, s);
// search backwards from position 4
n = s.rfind("is", 4);
print(n, s);
// find a single character
n = s.rfind('s');
print(n, s);
// find a single character
n = s.rfind('q');
print(n, s);
}
found: "is a string" at 5
found: "is is a string" at 2
found: "string" at 10
not found
Hover to see the original license.