C ++相当于sprintf?

时间:2011-02-13 07:50:54

标签: c++ printf

我知道std::coutprintf的C ++等价物。

sprintf的C ++等价物是什么?

7 个答案:

答案 0 :(得分:54)

std::ostringstream

示例:

#include <iostream>
#include <sstream> // for ostringstream
#include <string>

int main()
{
  std::string name = "nemo";
  int age = 1000;
  std::ostringstream out;  
  out << "name: " << name << ", age: " << age;
  std::cout << out.str() << '\n';
  return 0;
}

输出:

name: nemo, age: 1000

答案 1 :(得分:23)

使用Boost.Format。它具有printf - 类似语法,类型安全,std::string结果以及许多其他漂亮的东西。你不会回去。

答案 2 :(得分:16)

sprintf在C ++中运行得很好。

答案 3 :(得分:7)

您可以使用iomanip头文件格式化输出流。 检查this

答案 4 :(得分:5)

这是c ++ sprintf的一个很好的功能。如果你使用它们太多,流可能会变得难看。

std::string string_format(const std::string &fmt, ...) {
    int n, size=100;
    std::string str;
    va_list ap;

    while (1) {
        str.resize(size);
        va_start(ap, fmt);
        int n = vsnprintf(&str[0], size, fmt.c_str(), ap);
        va_end(ap);

        if (n > -1 && n < size)
            return str;
        if (n > -1)
            size = n + 1;
        else
            size *= 2;
    }
}

在C ++ 11及更高版本中,std :: string保证使用以'\0'结尾的连续存储,因此使用char *将其强制转换为&str[0]是合法的。

答案 5 :(得分:0)

使用stringstream来达到同样的效果。此外,您可以添加<cstdio>并仍然使用snprintf。

答案 6 :(得分:0)

取决于sprintf()的确切计划,std::to_string()可能比其他选择有用且更为惯用:

void say(const std::string& message) {
 // ...
}

int main() {
  say(std::to_string(5));
  say("Which is to say " + std::to_string(5) + " words");
}

std::to_string()的主要优点是恕我直言,它可以轻松扩展以支持sprintf()甚至无法实现字符串化的其他类型-类似于Java的Object.toString()方法