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

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

#include 

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



你可能感兴趣的:(C++)