Boost String Algorithms Libraryの使い方 その1:trim/trim_left/trim_right

VCLAnsiStringMFCの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くらいしか記憶ないし。

inimoni:INIファイルを元にINIファイルパースクラスを自動生成

窓の杜紹介されていました。URLはhttp://www18.ocn.ne.jp/~amedas/inimoni/
設定ファイルの保存にini形式ファイルを愛用しているおいらとしては、なかなかの注目株。BCBにも対応しているのがいい。
設定ファイルはレジストリに保存するのが行儀的にいいらしいようだけど、どうなんだろ。
個人的には、レジストリXML形式と比べて、エディタとかで容易に編集できる利点のほうが大きい気がする。