不使用sprintf或to_string将值插入字符串

时间:2014-08-03 16:53:29

标签: c++ string-formatting

目前我只知道将值插入C ++字符串或C字符串的两种方法。

我所知道的第一种方法是使用std::sprintf()和一个C字符串缓冲区(char数组)。

第二种方法是使用类似"value of i: " + to_string(value) + "\n"的内容。

但是,第一个需要创建缓冲区,如果您只想将字符串传递给函数,则会产生更多代码。第二个产生长行代码,每次插入一个值时字符串都会被中断,这使得代码更难阅读。

从Python我知道format()函数,它的用法如下:

"Value of i: {}\n".format(i)

大括号替换为格式值,并且可以追加.format()

我真的很喜欢Python的方法,因为字符串保持可读性,不需要创建额外的缓冲区。在C ++中有没有类似的方法呢?

1 个答案:

答案 0 :(得分:5)

在C ++中格式化数据的惯用方法是使用输出流(std::ostream reference)。如果您希望格式化的输出以std::string结尾,请使用output string stream

ostringstream res;
res << "Value of i: " << i << "\n";

使用str()成员函数来收集结果字符串:

std::string s = res.str();

这符合格式化输出数据的方法:

cout << "Value of i: " << i << "\n";