【C++】std::stringで後方一致の検索【endsWith/hasSuffix 接尾辞判定】


C++の文字列クラスstd::stringには、接尾辞(サフィックス)を検索するためのメソッドとしてendsWithhasSuffixが定義されていません。指定の文字列が特定の文字列で終わるかどうかを判定したい場合には、find関数やcompare関数による代用が必要となります。

目次

スポンサーリンク

後方一致 – suffix search, ends with match

末尾文字列の一致を判定する方法については、find関数とその検索開始位置の指定を用いてこれを実現します。

std::string s = "abc";
std::string suffix = "bc";

if (s.size() >= suffix.size() &&
    s.find(suffix, s.size() - suffix.size()) != std::string::npos) {
   puts("文字列`bc`で終わる文字列です");
}
rfind関数の利用法も知られていますが、全文に対する検索が行われるため処理効率はよくありません。

他にも、compareメンバ関数を用いる方法があります。

std::string s = "abc";
std::string suffix = "bc";
if (s.size() >= suffix.size() &&
    s.compare(s.size() - suffix.size(), suffix.size(), suffix) == 0) {
   puts("文字列`bc`で終わる文字列です");
}

ends_with関数

より処理効率の高いends_with関数の定義例は以下の通りです。指定の文字列がsuffixに指定された文字列で終わるかどうかを判定することができます。

// ends_with("abc", "bc") == true
bool ends_with(const std::string& s, const std::string& suffix) {
   if (s.size() < suffix.size()) return false;
   return std::equal(std::rbegin(suffix), std::rend(suffix), std::rbegin(s));
}

広告

関連するオススメの記事