一种std::string的格式化方法
2016-03-03 17:00
281 查看
使用标准库中string的好处是不用自己管理内存,很多场景下通过sprintf来格式化字符串时也存在不能预先申明char数组长度的问题,需要自己来管理字符串内存的申请与释放。而标准库std中并没有类似CString::Format()这样的接口,很多文章中提到利用istream、ostream一类的来格式化字符串则复杂繁琐。因此思考后决定自己写一个格式化std::string的通用函数:
利用这个函数可以很轻松地进行string字符串的格式化了,而且非常简洁!
2016-05-24 发现按上述方法设置std::string后,虽然字符内容是正确的,但string的size属性没有对应改过来,所以修改为:
#include <string> std::string & std_string_format(std::string & _str, const char * _Format, ...){ va_list marker = NULL; va_start(marker, _Format); int num_of_chars = _vscprintf(_Format, marker); if (num_of_chars > _str.capacity()){ _str.resize(num_of_chars + 1); } vsprintf((char *) _str.c_str(), _Format, marker); va_end(marker); return _str; }
利用这个函数可以很轻松地进行string字符串的格式化了,而且非常简洁!
2016-05-24 发现按上述方法设置std::string后,虽然字符内容是正确的,但string的size属性没有对应改过来,所以修改为:
std::string & std_string_format(std::string & _str, const char * _Format, ...) { std::string tmp; va_list marker = NULL; va_start(marker, _Format); size_t num_of_chars = _vscprintf(_Format, marker); if (num_of_chars > tmp.capacity()) { tmp.resize(num_of_chars + 1); } vsprintf_s((char *)tmp.data(), tmp.capacity(), _Format, marker); va_end(marker); _str = tmp.c_str(); return _str; }
相关文章推荐
- golang笔记——array
- 快速查询项目中没有引用的类和资源文件,为你的APK瘦身
- 【UI】【View】自定义布局方法与注意事项(二)
- iOS学习之路-UIPickerView初认识与使用
- leetcode - Remove Invalid Parentheses
- JS面向对象的程序设计
- 根据屏幕大小显示不同的layout下的界面
- 工作总结
- Python3.4安装PyOpenGL模块及PIP常用命令
- 链表操作---面向过程--到---面型对象---到模板类
- css display visibility
- C语言 输入输出
- 从数据文件看timestamp范围限制
- 使用GreenDao 添加字段,删除表,新增表操作
- LINUX服务器的几种实现模型
- 手淘商家累计活跃粉丝破百亿 电商进入“拼粉”时代
- Java 内存区域
- div中添加<img>后图片下方多出3px空白
- simple-spring-memcached 注解配置
- 关于assert, _DEBUG 与 NDEBUG