在Python中,我可以这样做:
print("Hello, %s!" % username)
我如何在C ++中做类似的事情?我可以这样做,但这可能不是一个好习惯:
void welcome_message(std::string username) {
std::cout << "Hello, " << username << "!" <<std::endl;
}
答案 0 :(得分:2)
对于简单代码,您可以使用std::cout
。但这对于本地化并不是很好,看起来很难看。
Boost.Format通过提供非常类似于您在问题中展示的旧Python 2字符串格式化功能(已由str.format()
取代)来解决此问题。这有点像C printf
,除了安全。
以下是一个例子:
#include <string>
#include <iostream>
#include <boost/format.hpp>
void welcome_message(const std::string& username)
{
std::cout << boost::format("Hello, %s!\n") % username;
}
int main()
{
welcome_message("Jim");
}
答案 1 :(得分:1)
void welcome_message(const std::string& username) {
std::cout << "Hello, " << username << "!" <<std::endl;
}
除非你做一些特别关注性能的事情,否则在C ++中是一件非常的好事。依赖严重超载的<<
std::ostream
是一种很好的做法。这就是它的用途。
注意我已经更改了函数原型以避免不必要的字符串复制。 printf
方式充满了危险的角落情况:您需要使格式化程序完全正确,否则您可能会冒未定义程序行为的风险。
我可以对此征收的唯一批评是你对std::endl
的使用。请改用"!\n"
。
答案 2 :(得分:1)
您可以随时使用C&C的printf:
#include <cstdio>
void welcome_message(const std::string &username) {
printf("Hello, %s\n", username.c_str());
}
请注意,您必须使用username
将c_str()
转换为C字符串。
如上所述,使用cout
和<<
是非常标准的,但很多人反对它的原因有很多(例如:非国际化,可读性)。因此,如果您更喜欢字符串格式,那么您可以选择。