C++20標準ライブラリの文字列クラスでは「先頭/末尾一致を確認するメンバ関数」が追加されます。
-
starts_with
:対象は指定する部分文字列から始まっている? -
ends_with
:対象は指定する部分文字列で終わっている?
えー、いまさらーとか言わないソコ
starts_withとends_with
文字列クラスstd::string
と文字列ビュークラスstd::string_view
それぞれに、starts_with
, ends_with
メンバ関数が追加されます。1
#include <string>
#include <string_view>
void download(std::string_view url)
{
if (url.starts_with("http://") || url.starts_with("https://")) {
// http(s)スキームを処理...
} else {
// ...
}
}
void process_path(std::string path)
{
// path末尾が / となるよう正規化
if (!path.ends_with('/')) {
path += '/';
}
// ...
}
※注意:前掲コードでは動作例示のためにstd::string
を使いましたが、ファイルパスに関する処理は std::filesystem::path
クラス の方が適しています。
Three string checking Musketeers
starts_with
とends_with
は “Three string checking Musketeers(文字列チェック三銃士)2” のうちの2関数です。最後の1つ contains
は、2023年に予定されているC++23標準ライブラリへの追加が決定しています。3
-
contains
:対象は指定する部分文字列を含んでいる?
3人揃うまであと3年待ってね ☆(ゝω・)vキャピ
参考ページ
- http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0457r2.html
- http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p1679r3.html
- https://speakerdeck.com/cpp/cedec2020?slide=18
-
厳密には文字列クラステンプレート
std::baisc_string<E,T,A>
と文字列ビュークラステンプレートstd::basic_string_view<E,T,A>
に対して、それぞれ3種類のメンバ関数オーバーロード(文字列ビュー, 単一文字, NULL終端文字へのポインタ)が追加されます。 ↩ -
"Three string checking Musketeers" という表現は提案文書 P1679R3 より借用しました。このフレーズが気に入ったのでこの記事を書いただけともいう。 ↩
-
Trip report: Autumn ISO C++ standards meeting (virtual) – Sutter’s Mill 「I can already hear the chorus of "finally!"」 ↩