Как отправить строку формата в iostream?

Возможный дубликат:
форматирование std :: string как sprintf

Могу ли я использовать классы c ++ iostream со строкой формата, такой как printf?

В принципе, я хочу иметь возможность сделать что-то вроде: —

snprintf (inchars, len, "%4f %6.2f %3d \n", float1, float2, int1);

легко с помощью струнных потоков. Есть простой способ сделать это?

2

Решение

Да, есть Boost Format Library (который является внутренним потоком).

Пример:

#include <boost/format.hpp>
#include <iostream>

int main() {
std::cout << boost::format("%s %s!\n") % "Hello" % "World";
return 0;
}
5

Другие решения

Вы можете написать функцию-оболочку, которая возвращает что-то, что вы можете доставить в ostringstream.

Эта функция объединяет некоторые решения, представленные в ссылка на сайт moooeeeep указал в комментариях:

std::string string_format(const char *fmt, ...) {
std::vector<char> str(100);
va_list ap;
while (1) {
va_start(ap, fmt);
int n = vsnprintf(&str[0], str.size(), fmt, ap);
va_end(ap);
if (n > -1 && n < str.size()) {
str.resize(n);
return &str[0];
}
str.resize(str.size() * 2);
}
}
2

Этот вид форматирования требует немного больше усилий при использовании стандартных потоков C ++. В частности, вы должны использовать ручные манипуляторы который может указывать количество цифр, отображаемых после десятичного знака.

0
По вопросам рекламы [email protected]