C ++ эквивалент sprintf? - PullRequest
       10

C ++ эквивалент sprintf?

67 голосов
/ 13 февраля 2011

Я знаю, что std::cout является эквивалентом C ++ printf.

Что такое эквивалент C ++ sprintf?

Ответы [ 6 ]

54 голосов
/ 13 февраля 2011

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
23 голосов
/ 13 февраля 2011

Использовать Boost.Format .Он имеет printf -подобный синтаксис, безопасность типов, std::string результаты и множество других интересных вещей.Ты не вернешься.

16 голосов
/ 13 февраля 2011

sprintf прекрасно работает в C ++.

7 голосов
/ 04 августа 2014

Вы можете использовать заголовочный файл iomanip для форматирования выходного потока. Отметьте это !

5 голосов
/ 03 декабря 2011

Вот хорошая функция для 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].

0 голосов
/ 13 февраля 2011

Используйте поток строк для достижения того же эффекта. Также вы можете включить <cstdio> и по-прежнему использовать snprintf.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...