Boost String Algorithms Libraryの使い方 その1:trim/trim_left/trim_right
VCLのAnsiStringやMFCのCStringと比べて、C++標準の汎用文字列クラスであるstd::stringは機能が貧弱。そいつを補完するのがboostのString Algorithms Library。
以下はその簡単な使い方。
1.trim/trim_copy
trim関数は文字列の両端から空白を除去する。trim_copyは空白を除去した結果を返し、文字列そのものには影響を与えない。
#include <string> #include <boost/algorithm/string.hpp> void foo() { std::string ss(" foo "); boost::trim(ss); }
2.trim_if/trim_copy_if
trim_ifは文字列の両端から条件を満たした部分を除去する。trim_copy_ifはtrim_copy同様、結果のみを返し、文字列そのものには影響を与えない。
#include <string> #include <boost/algorithm/string.hpp> void foo() { std::string ss("#foo"); boost::trim_if(ss, std::bind2nd(std::equal_to<char>(), '#')); }
条件式は関数オブジェクトを渡す。また、範囲指定などいくつかの関数オブジェクトがString Algorithms Libraryに用意されている。
#include <string> #include <boost/algorithm/string.hpp> void foo() { std::string ss("(12345)"); boost::trim_if(ss, boost::is_any_of("()")); }
関数オブジェクト"is_any_of"は文字列のうち、どれかを満たすもの。
trim系関数はほかに、左側のみを除去するtrim_left、右側のみを除去するtrim_rightがあり、それぞれ*_copy/*_if/*_copy_ifも用意されている。
20:20 追記:
これ、コメント(ツッコミサンクスです!)にもあるとおり、BCBでは無理です。orz(bcbboostも同様。)
Boostに関してはBCBは次の次(1.35か?)でサポート対象外になるのが濃厚っぽい。
まぁ、1.34はまだ出ていないし、来年夏くらい(だっけ?)に出て来るHighlander辺りに期待するしかないか。
こんな時は素直にAnsiStringを使いましょう。って、BCBでstd::string使う機会ってあまりないからな・・・。おいらの場合、boost::tokenizerとboost::regexくらいしか記憶ないし。