博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(二)boost库之字符串格式化
阅读量:6861 次
发布时间:2019-06-26

本文共 925 字,大约阅读时间需要 3 分钟。

hot3.png

程序中经常需要用到字符串格式化,就个人而言还是比较倾向于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;

转载于:https://my.oschina.net/lingluonianhua/blog/210596

你可能感兴趣的文章
中冶集团首度亮相智博会 探索“智慧城市的智慧地下”
查看>>
思科:6成物联网计划仍处于概念验证阶段
查看>>
远离个人信息裸奔伤害
查看>>
Orange将“鸡蛋”放入ECOMP的篮子
查看>>
大数据看AI人才分布:美国领先,中国培养潜能大
查看>>
光伏产业还值不值得继续关注?
查看>>
三星三季移动DRAM市场份额创新高,达64.5%
查看>>
智能楼宇中的安防监控系统
查看>>
中科联想身份认证云服务联合实验室在北京揭牌
查看>>
Winform 通用分页控件实战篇(提供源码下载)
查看>>
云计算对数据中心行业未来发展的影响
查看>>
大数据时代 将会发生哪些变化?
查看>>
如何构建一个高效的数据科学部门
查看>>
XSS现代WAF规则探测及绕过技术
查看>>
HPE升级Integrity服务器采用最新安腾引擎
查看>>
何以从IT时代到DT时代?
查看>>
Oracle数据库体系结构解析
查看>>
高性能云存储将不再是一个梦
查看>>
Oracle RAC Database 11.1.0.6监听故障案例
查看>>
强密码策略的最佳实践
查看>>