名前空間
変種
操作

std::basic_string::find

提供: cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::basic_string
 
size_type find( const basic_string& str, size_type pos = 0 ) const
(1)
size_type find( const CharT* s, size_type pos, size_type count ) const;
(2)
size_type find( const CharT* s, size_type pos = 0 ) const;
(3)
size_type find( CharT ch, size_type pos = 0 ) const;
(4)
template < class T >
size_type find( const T& t, size_type pos = 0 ) const;
(5) (C++17およびそれ以降)

指定された文字シーケンスと等しい最初の部分文字列を探します。 検索は pos から開始されます。 つまり見つかった文字列が pos より前の位置で始まることはありません。

1) str と等しい最初の部分文字列を探します。
2) s の指す文字列の最初の count 個の文字と等しい最初の部分文字列を探します。 s はヌル文字を含むことができます。
3) 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 である場合にのみ、オーバーロード解決に参加します。

形式的には、部分文字列 str は、以下のすべてが真である場合、位置 xpos見つかったと言います。

  • xpos >= pos
  • xpos + str.size() <= size()
  • str 内のすべての位置 n について Traits::eq(at(xpos+n), str.at(n))

特に、これは以下のことを暗に示します。

  • 部分文字列は pos <= size() - str.size() の場合にのみ見つかります。
  • 空の部分文字列は pos <= size() の場合にのみ pos で見つかります。
  • 空でない部分文字列に対して pos >= size() の場合この関数は必ず npos を返します。

目次

[編集] 引数

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

[編集] 戻り値

見つかった部分文字列の最初の文字の位置、またはそのような部分文字列が見つからなければ npos

[編集] 例外

1-4) (なし)
(C++11以前)
1,4)
noexcept 指定:  
noexcept
  
2,3) (なし)
(C++11およびそれ以降)
(C++14以前)
1)
noexcept 指定:  
noexcept
  
2,3,4) (なし)
(C++14およびそれ以降)
5) sv の初期化が例外を投げなければ、何も投げません。
(C++17およびそれ以降)

[編集] 欠陥報告

以下の動作変更欠陥報告は以前に発行された 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::string const &s)
{
    if (n == std::string::npos) {
        std::cout << "not found\n";
    } else {
        std::cout << "found: " << s.substr(n) << '\n';
    }
}
 
int main()
{
    std::string::size_type n;
    std::string const s = "This is a string";
 
    // search from beginning of string
    n = s.find("is");
    print(n, s);
 
    // search from position 5
    n = s.find("is", 5);
    print(n, s);
 
    // find a single character
    n = s.find('a');
    print(n, s);
 
    // find a single character
    n = s.find('q');
    print(n, s);
}

出力:

found: is is a string
found: is a string
found: a string
not found

[編集] 関連項目

部分文字列が現れる最初の位置を探します
(関数) [edit]
別のワイド文字列中のワイド文字列が現れる最初の位置を探します
(関数) [edit]
文字が現れる最初の位置を探します
(関数) [edit]
ワイド文字列中のワイド文字が現れる最後の位置を探します
(関数) [edit]
部分文字列が現れる最後の位置を探します
(パブリックメンバ関数) [edit]
文字が現れる最初の位置を探します
(パブリックメンバ関数) [edit]
文字が現れない最初の位置を探します
(パブリックメンバ関数) [edit]
文字が現れる最後の位置を探します
(パブリックメンバ関数) [edit]
文字が現れない最後の位置を探します
(パブリックメンバ関数) [edit]
指定範囲の要素に対して検索を行います
(関数テンプレート) [edit]