如何在C ++中使用转换说明符?

时间:2016-04-15 14:06:04

标签: c++

在Python中,我可以这样做:

print("Hello, %s!" % username)

我如何在C ++中做类似的事情?我可以这样做,但这可能不是一个好习惯:

void welcome_message(std::string username) {
    std::cout << "Hello, " << username << "!" <<std::endl;
}

3 个答案:

答案 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");
}

live demo

答案 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());
}

请注意,您必须使用usernamec_str()转换为C字符串。

如上所述,使用cout<<是非常标准的,但很多人反对它的原因有很多(例如:非国际化,可读性)。因此,如果您更喜欢字符串格式,那么您可以选择。