it-swarm-ru.tech

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

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

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

66
lital maatuk

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
54
Vijay Mathew

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

23
janm

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

16
Steve Rowe

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

7
vinkris

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

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

0
regality