Boost String Algorithms Libraryの使い方 その2:文字列比較系関数
残念ながら、比較系の関数群はC++Builder2010では動作しない。ソースは不本意ながらも(マテ)Visual Studio 2008で動作したのをコピペ。
1.contains/starts_with/ends_with
containsは文字列を「含んでいる」か、starts_withは「始まっているか」、ends_withは「終わっている」かをチェックする。 関数名の先頭にiがつくと大文字小文字を区別しないバージョン。
#include <string> #include <iostream> #include <boost/algorithm/string.hpp> int _tmain(int argc, _TCHAR* argv[]) { std::wstring s(L"aaabbbccc"); if (boost::contains(s, L"b")) { std::cout << "ok!!" << std::endl; } else { std::cout << "failed!!" << std::endl; } return 0; }
2.lexicographical_compare
lexicographical_compareは辞書順の比較。要するに"operator<"。3番目の引数に関数オブジェクトを渡して比較方法をコントロールすることが出来る。これはcontains/starts_with/ends_withも同様。
#include <stdlib.h> #include <string> #include <iostream> #include <boost/algorithm/string.hpp> bool comp_str(const wchar_t c1, const wchar_t c2) { wchar_t ic1 = toupper(c1); wchar_t ic2 = toupper(c2); return ic1 < ic2; } int _tmain(int argc, _TCHAR* argv[]) { std::wstring s1(L"Aa"); std::wstring s2(L"aa"); // 普通に比較 if (boost::lexicographical_compare(s1, s2)) { std::cout << "ok!!" << std::endl; } else { std::cout << "failed!!" << std::endl; } // 比較関数オブジェクトによって大文字小文字を無視して比較 if (boost::lexicographical_compare(s1, s2, comp_str)) { std::cout << "ok!!" << std::endl; } else { std::cout << "failed!!" << std::endl; } return 0; }