boost——字符串与文本处理format

#include <iostream>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <algorithm>
#include <boost/format.hpp>
#include <iomanip>
using namespace boost;
using namespace std;
using boost::io::group;
/*format类摘要
namespace boost {

template<class charT, class Traits=std::char_traits<charT> > 
class basic_format 
{
public:
  typedef std::basic_string<charT, Traits> string_t;
  typedef typename string_t::size_type     size_type;
  basic_format(const charT* str);
  basic_format(const charT* str, const std::locale & loc);
  basic_format(const string_t& s);
  basic_format(const string_t& s, const std::locale & loc);
  basic_format& operator= (const basic_format& x);

  void clear(); // reset buffers
  basic_format& parse(const string_t&); // clears and parse a new format string

  string_t str() const;
  size_type size() const;

  // pass arguments through those operators :
  template<class T>  basic_format&   operator%(T& x);  
  template<class T>  basic_format&   operator%(const T& x);

  // dump buffers to ostream :
  friend std::basic_ostream<charT, Traits>& 
  operator<< <> ( std::basic_ostream<charT, Traits>& , basic_format& ); 

   // Choosing which errors will throw exceptions :
   unsigned char exceptions() const;
   unsigned char exceptions(unsigned char newexcept);

// ............  this is just an extract .......
}; // basic_format

typedef basic_format<char >          format;
typedef basic_format<wchar_t >      wformat;


// free function for ease of use :
template<class charT, class Traits> 
std::basic_string<charT,Traits>  str(const basic_format<charT,Traits>& f) {
      return f.str();
}


} // namespace boost

*/
/*格式化语法:
 * 1.%05d:输出宽度为5的整数,不足位用0填充
 * 2.%-8.3f:输出左对齐,总宽度为8,小数位3位的浮点数
 * 3.%10s:输出10位的字符串,不足位用空格填充
 * 4.%05x:输出宽度为5的大写16进制数,不足位用0填充
 * 5.%|spec|:与printf格式选项功能相同,但两边增加了竖线分隔,可以更好地区分格式化选项与普通字符
 * 6.%N%:标记第N个参数,相当于占位符,不带任何奇特的格式化选项
 *
 * 建议:
 * 1.format由于要做安全检查工作,性能略差,约比printf25倍,为了提高format的性能,建议在编程中应该先建立const format对象,然后拷贝这个对象进行格式化操作
 *
 * 高级功能:
 * 1.basic_format& bind_arg(int argN,const T& val); //将第argN个参数绑定为val,即使调用clear()也保持不变
 * 2.basic_format& clear_bind(int argN);    //取消格式化字符串第argN位置的参数绑定
 * 3.basic_format& clear_binds();   //取消格式化字符串所有位置参数绑定,并调用argN
 * 4.basic_format& modify_item(int itemN,T manipulator);    //设置格式化字符串第itemN位置的格式化选项,manipulator是一个boost::io::group返回的对象
 * */
int main( int argc,char **argv)
{
    cout << format("%s:%d+%d=%d\n")%"sum"% 1%2%(1+2); //经典用法
    cout << format("%1% %2%") % 36 %37; //简单风格,可以重新排列输出
    cout << format("(x,y)=(%1$+5d,%2$+5d)\n") %-23 %35;    //精确的格式化,带posix_printf位置提示符
    format fmt("(%1%+%2%)*%2%=%3%");
    fmt % 2 % 5;
    fmt % ((2+5*5));

    format fmt1("%05d\n%-8.3f\n%10s\n%05x\n");
    cout << fmt1 %62 %2.236 %" 12345678" %48;
    cout << fmt.str() << endl;

    format fmt2("%1% %2% %3% %2% %1%\n");
    cout << fmt2 %1 %2 %3;
    fmt2.bind_arg(2,10);
    cout << fmt2 %1 %3;

    fmt2.clear();
    cout << fmt2 % group(showbase,oct,111) % 333;
    fmt2.clear_binds();

    fmt2.modify_item(1,group(hex,right,showbase,setw(8),setfill('*')));
    cout << fmt2 %49 %20 %100;
     return (0);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值