C++中格式化字符串的最佳方法

7

Javascript中,我可以使用模板字符串来格式化字符串。

const cnt = 12;
console.log(`Total count: ${cnt}`);

如果我使用 Python,那么我可以使用 f-string

age = 4 * 10
f'My age is {age}'

但是,如果我正在使用 C++(17),那么最好的解决方案是什么(如果可能的话)?


4
安装 libfmt 后,您可以使用 fmt::print("Total count: {}", cnt); - HolyBlackCat
1
std::cout << "总计数:" << cnt << std::endl; 也适用于stringstream。 - Vlad Feinstein
我不知道问题出在哪里,但如果你想在字符串中使用数字,这里有一个例子。size_t age = 40; std::string str = "我的年龄是 " + std::to_string(age); - asmmo
3个回答

13

我认为更简单的方法是使用std::to_string

std::string str = "My age is ";
str += std::to_string(age);

std::ostringstream 也可以很好地工作,并且同样有用:

在您的源文件顶部使用此代码:


#include <sstream>

然后在代码中,您可以这样做:

std::ostringstream ss;
ss << "My age is " << age;
std::string str = ss.str();

11

你可以使用sprintf函数。

sprintf(dest_string, "My age is %d", age).

但是使用sprintf会导致错误,最好使用snprintf:

snprintf(dest_string, size , "My age is %d", age);

其中size为最大字节数。


11
欢迎来到StackOverflow,David。不幸的是,对于标记为C++的问题,用"C"语言回答虽然是有效的,但往往会遭到贬低。(免责声明:我没有点踩,但我也曾受到这种文化的影响) - selbie
8
虽然这个解决方案可以在C ++中起作用,但它基于C语言,对于C ++来说不是一个好的解决方案,因为它缺乏足够的类型检查和缓冲区溢出检查,而这些问题C++已经通过其他解决方案得到了解决。 - Remy Lebeau
哪个其他解决方案?有趣的是,Stroustrup 的《C++旅行指南(第三版)》(所以这是一本关于 C++ 到 C++23 的非常简短和基础的指南)也解释了这种 C 方法(但没有涵盖 c 库的其他部分)。在 std::format 得到广泛使用之前(目前仍然无法在许多编译器上使用),没有完美的 C++ 解决方案。我认为我们应该相信 Stroustrup。 - Giacomo Catenazzi

0

如果你想要写入标准输出:

const int cnt = 12;
std::cout << "Total count: " << cnt << "\n";

写入到任何其他流的方式都类似。例如,将std::cout替换为std::ofstream以写入文件。如果您需要格式化的字符串:

std::ostringstream oss;
oss << "Total count: " << cnt << "\n";
std::string s = oss.str();
std::cout << s;

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