名前空間
変種
操作

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

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

size_type
    find_first_not_of( const T& t,

                       size_type pos = 0 ) const noexcept(/* see below */);
(C++17以上)
(C++20未満)
template < class T >

constexpr size_type
    find_first_not_of( const T& t,

                       size_type pos = 0 ) const noexcept(/* see below */);
(C++20以上)

指定された文字シーケンス内の文字のいずれとも等しくない最初の文字を探します。 検索は区間 [pos, size()) のみが考慮されます。 区間内に文字がなければ、 npos が返されます。

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

[編集] 例外

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>
 
int main() {
    std::string to_search = "Some data with %MACROS to substitute";
 
    std::cout << "Before: " << to_search << '\n';
 
    auto pos = std::string::npos;
    while ((pos = to_search.find('%')) != std::string::npos) {
        // マクロ名には大文字、小文字、数字を使用できます。
        const auto after = to_search.find_first_not_of("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", pos + 1);
 
        // to_search[pos] == '%' および to_search[after] == ' ' ('S' の後の) になります。
 
        if(after != std::string::npos)
            to_search.replace(pos, after - pos, "some very nice macros");
    }
 
    std::cout << "After: " << to_search << '\n';
}

出力:

Before: Some data with %MACROS to substitute
After: Some data with some very nice macros to substitute

[編集] 関連項目

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