sle*_*ica 17 c++ string formatting
在构造std :: string时是否有一种快速,简单的方法来获得类似sprintf的格式?就像是...
std::string foo("A number (%d) and a character (%c).\n", 18, 'a');
Run Code Online (Sandbox Code Playgroud)
Dou*_* T. 16
没有内置到字符串的构造函数中,但您可能想要检查boost格式.它是一种更加类型安全的sprintf样式字符串格式.有了它你至少可以这样做:
std::string foo =
boost::str(boost::format("A number (%d) and a character (%c)\n") % 18 % 'a');
Run Code Online (Sandbox Code Playgroud)
Naw*_*waz 11
我写了一个stringbuilder类,你可以用,我认为这是优于boost::format因为不像它,stringbuilder不使用C风格的格式字符串一样%d,%c.等等
以下是如何stringbuilder帮助您只需一行:
std::string s=stringbuilder() << "A number " << 18 <<" and a character " <<'a';
Run Code Online (Sandbox Code Playgroud)
执行stringbuilder很简单:
struct stringbuilder
{
std::stringstream ss;
template<typename T>
stringbuilder & operator << (const T &data)
{
ss << data;
return *this;
}
operator std::string() { return ss.str(); }
};
Run Code Online (Sandbox Code Playgroud)
在ideone上演示:http://ideone.com/J9ALB
我刚刚编写了以下博客,描述了许多不同的使用方式stringbuilder.
该FMT库提供了一个安全的sprintf实现,它返回一个字符串:
std::string foo = fmt::sprintf("A number (%d) and a character (%c).\n", 18, 'a');
Run Code Online (Sandbox Code Playgroud)
该库还支持Python的str.format语法:
std::string foo = fmt::format("A number ({}) and a character ({}).\n", 18, 'a');
Run Code Online (Sandbox Code Playgroud)
它的目的与Boost Format类似,但速度更快,非常小,并且除了标准C++库之外没有外部依赖性.
免责声明:我是这个图书馆的作者.
| 归档时间: |
|
| 查看次数: |
11783 次 |
| 最近记录: |