C++中字符串格式化的首选方法是什么?

5

对我来说,这有点啰嗦:

ostrstream ss;
ss << "Selected elements: " << i << "," << j << ".";
string msg(ss.str(), (size_t)ss.pcount());

有没有一种简洁的方式来使用模板或宏格式化文本消息?

4
你可以查看 Boost Format:http://www.boost.org/doc/libs/1_55_0/libs/format/ - Adrian Cornish
1
参见:https://dev59.com/PHE95IYBdhLWcg3wXcvd - uncletall
1
@Adrian:谢谢,这就是我想要的。 - alexm
3
是的,Boost.Format 就是答案。 - Lightness Races in Orbit
1
@πάντα ῥεῖ 哎呀,那个问题和它的答案太糟糕了。我希望你没有关闭它;我正要为这个特定的问题提交一个好的答案和一个好的例子。叹气。哦,算了。 - Lightness Races in Orbit
显示剩余10条评论
2个回答

3
是的,您正在寻找Boost.Format
const int i = 3, j = 4;
const std::string msg = (boost::format("Selected elements: %d %d") % i % j).str();

(现场演示)


-6

您最有可能需要的是sprintf,它类似于printf,但返回一个C字符串。因此,您的代码将是
string msg(sprintf( "Selected elements: %d, %d.", i, j ) )

编辑

看起来我没有读自己的链接。所以你有三行代码。您始终可以定义以下内容

std::string itostr( int i )
{
    char temp[20];
    std::sprintf( temp, "%d" i);
    std::string out(temp);
    return out;
}

然后你可以使用 + 运算符来连接字符串。
string msg("Selected elements: " + itostr(i) + "," + itostr(j) + ".");

这是行不通的。sprintf会将结果输出到它的第一个参数中,而你的第一个参数应该是一个常量格式字符串。 - v.oddou
我能想到的最糟糕的建议就是使用std::sprintf() - πάντα ῥεῖ

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