名前空間
変種
操作

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

提供: cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::basic_string
 
(1)
size_type rfind(const basic_string& str, size_type pos = npos )const;
(C++11未満)
size_type rfind(const basic_string& str,
                 size_type pos = npos )constnoexcept;
(C++11以上)
(C++20未満)
constexpr size_type rfind(const basic_string& str,
                           size_type pos = npos )constnoexcept;
(C++20以上)
(2)
size_type rfind(const CharT* s, size_type pos, size_type count )const;
(C++20未満)
constexpr size_type rfind(const CharT* s,
                           size_type pos, size_type count )const;
(C++20以上)
(3)
size_type rfind(const CharT* s, size_type pos = npos )const;
(C++20未満)
constexpr size_type rfind(const CharT* s, size_type pos = npos )const;
(C++20以上)
(4)
size_type rfind( CharT ch, size_type pos = npos )const;
(C++11未満)
size_type rfind( CharT ch, size_type pos = npos )constnoexcept;
(C++11以上)
(C++20未満)
constexpr size_type rfind( CharT ch, size_type pos = npos )constnoexcept;
(C++20以上)
(5)
template<class T >

size_type

    rfind(const T& t, size_type pos = npos )constnoexcept(/* see below */);
(C++17以上)
(C++20未満)
template<class T >

constexpr size_type

    rfind(const T& t, size_type pos = npos )constnoexcept(/* see below */);
(C++20以上)

指定された文字列と等しい最後の部分文字列を探します。 検索は pos から開始されます。 つまり、見つかった文字列が位置 pos より後の位置で始まることはありません。 pos として npos または size()-1 より小さくない任意の値が渡された場合は、文字列全体が検索されます。

1)str と等しい最後の部分文字列を探します。
2) 範囲 [s, s+count) と等しい最後の部分文字列を探します。 この範囲はヌル文字を含むことができます。
3)s の指す文字列と等しい最後の部分文字列を探します。 文字列の長さは Traits::length(s) を用いて最初のヌル文字によって決定されます。
4)ch と等しい最後の文字を探します。
5)std::basic_string_view<CharT, Traits> sv = t; によって行われたかのように、 t を文字列ビュー sv に暗黙に変換し、 sv の内容と等しい最後の部分文字列を探します。 このオーバーロードは、std::is_convertible_v<const T&, std::basic_string_view<CharT, Traits>>true であり、 std::is_convertible_v<const T&, const CharT*>false である場合にのみ、オーバーロード解決に参加します。

すべての場合において、等しさは Traits::eq を呼ぶことによって調べられます。

目次

[編集]引数

str - 検索する文字列
pos - 検索を開始する位置
count - 検索する部分文字列の長さ
s - 検索する文字列を指すポインタ
ch - 検索する文字
t - 検索する (std::basic_string_view に変換可能な) オブジェクト

[編集]戻り値

見つかった部分文字列の最初の文字の位置、またはそのような部分文字列が見つからない場合は npos。 これは文字列の開始位置であることに注意してください。 終了位置ではありません。

空文字列 (str.size()count、または Traits::length(s) がゼロ) を検索した場合は pos を返します (空文字列はただちに見つかります)。 ただし pos > size() (pos == npos も含みます) の場合は size() を返します。

それ以外で size() がゼロの場合は常に npos が返されます。

[編集]例外

5)
noexcept 指定:  
noexcept(std::is_nothrow_convertible_v<const T&, std::basic_string_view<CharT, Traits>>)

[編集]欠陥報告

以下の動作変更欠陥報告は以前に発行された C++ 標準に遡って適用されました。

DR 適用先 発行時の動作 正しい動作
LWG 2946 C++17 string_view overload causes ambiguity in some cases avoided by making it a template

[編集]

#include <string>#include <iostream>   void print(std::string::size_type n, std::stringconst&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::stringconst s ="This is a string";   // 文字列の終端から逆方向に検索します。 n = s.rfind("is"); print(n, s);// 位置 4 から逆方向に検索します。 n = s.rfind("is", 4); print(n, s);// 単一の文字を探します。 n = s.rfind('s'); print(n, s);// 単一の文字を探します。 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

[編集]関連項目

文字列内の文字を探します
(パブリックメンバ関数)[edit]
文字が現れる最初の位置を探します
(パブリックメンバ関数)[edit]
文字が現れない最初の位置を探します
(パブリックメンバ関数)[edit]
文字が現れる最後の位置を探します
(パブリックメンバ関数)[edit]
文字が現れない最後の位置を探します
(パブリックメンバ関数)[edit]
close