boost库之字符串格式化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了boost库之字符串格式化相关的知识,希望对你有一定的参考价值。

(二)boost库之字符串格式化

程序中经常需要用到字符串格式化,就个人而言还是比较倾向于C格式的输出,如果只是打印日志,printf就够了,如果到生成字符串,获取你可以选择sprintf,但这些都是需要你预先分配空间的,对于一些不可预知长度的字符串格式化,就比较鸡肋了,不过还是可以实现的,如:

void XString::format(const char *strFmt, ...)
{
    va_list vl;

    va_start(vl, strFmt);
    int count = _vscprintf(strFmt, vl); //_vsctprintf(format, vl); 
    va_end(vl);

    char *pszBuf = new char[count + 1];
    va_start(vl, strFmt);
    vsprintf_s(pszBuf, count + 1, strFmt, vl);  //_vstprintf_s
    va_end(vl);
    this->assign(pszBuf);
    delete pszBuf;
}

但对于C++程序来说,%s支持的字符串参数类型必须是char*, 所以程序到处都需要.c_str(),经常也会因此造成大量的乱码输出

有了boost的format组件,以上问题就都迎刃而解了。

 

一、format 替代printf的功能

 

std::cout << format("%s:%04d%02d%02d") % "日期"% 2013 % 9 % 28 << std::endl;

%s可以是std::string

std::string test("string");
format fmt3("%s");    
std::cout << format("%s") % test<< std::endl;

 

二、format支持%N

format fmt2("%1% + %2%*%1% = %3%");
fmt2 % 2 % 3 % (2+2*3) ;
std::cout << fmt2.str() << std::endl;

 

以上是关于boost库之字符串格式化的主要内容,如果未能解决你的问题,请参考以下文章

boost库之文件处理filesystem

boost库之日期时间

boost库之多线程

boost库之异常处理

boost库之多线程间通信

boost库之正则表达式regex