一种std::string的格式化方法

使用标准库中string的好处是不用自己管理内存,很多场景下通过sprintf来格式化字符串时也存在不能预先申明char数组长度的问题,需要自己来管理字符串内存的申请与释放。而标准库std中并没有类似CString::Format()这样的接口,很多文章中提到利用istream、ostream一类的来格式化字符串则复杂繁琐。因此思考后决定自己写一个格式化std::string的通用函数:

#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;
}



评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值