在C++中如何像Java 5/6中的String.format()一样方便地格式化字符串?

3

是否有一种通用函数可用于执行sprintf类型的字符串格式化,而无需提供固定大小的缓冲区,并返回string类实例?

我知道stringstream,但它不能满足我的需求,我不想像它要求的那样硬编码输出语句中标记的位置。

我希望能够像sprintf一样定义模式,但没有C语言的负担,并且以更具有对象导向的C++方式实现。

也许有一些函数使用stringstream执行sprintf的功能,并生成一个string对象?类似于Java中String.format()或Python中等价的字符串格式化语法所提供的方便性


4
你能具体说明 stringstream 不能做什么,而你需要的功能是什么吗?通过将 stringstream<iomanip> 中的各种输出规范结合使用,几乎可以复制 sprintf 可以实现的所有功能。 - Chad
请参见:https://dev59.com/knVD5IYBdhLWcg3wAWoO - Martin York
2个回答

10

Boost格式化库

<boost/format.hpp> 格式类以一种类型安全的方式提供了类似于 printf 的格式化,允许输出用户定义的类型。


0
如果你不使用Boost.Format或Boost.Locale,你可以使用我的简单stringstream封装器,或进一步封装它: fakeformat 例子:
REQUIRE( ff::format("{2}ff{1}").with('a').also_with(7).now()=="7ffa" );

Ideone

Ideone


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接