std::stringで大文字小文字を無視して比較する

std::stringは==で比較すると、大文字小文字を区別する。いまvector<string>があってここからある文字列が存在するかを調べたいが、大文字小文字を無視して比較したいとする。

普通にstrcmpiなどでやってしまうのが簡単だが、せっかくなのでstd::stringを調べてこれを改良してやる方法。

std::stringは以下のようにtypedefされている。

basic_stringのテンプレート第2引数のchar_traitsが、文字列の比較の実装などを提供するクラスになっている、==演算でこのクラスのstatic関数compareが呼ばれる。

よってこのchar_traitsを自分で実装し、そこでCaseInsensitiveに扱う関数をつくり、basic_stringの第2引数にこれを渡せばいいはず。

vectorのfindでも動いた。

今回はこれが動いたが実際にはchar_traitsの他の関数が呼ばれるかもしれないのか良くわからないので、注意が必要。

Leave a Reply

Your email address will not be published. Required fields are marked *

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)