Как использовать boost :: format для обнуления числа, в котором количество десятичных разрядов содержится в переменной?

Я хотел бы обнулить число таким, чтобы оно состояло из 5 цифр, и получить его в виде строки. Это можно сделать с помощью следующего:

unsigned int theNumber = 10;
std::string theZeropaddedString = (boost::format("%05u") % theNumber).str();

Однако я не хочу жестко задавать количество цифр (т. Е. 5 в «% 05u»).

Как я могу использовать boost :: format, но указать количество цифр через переменную?

(т.е. введите число цифр в unsigned int numberOfDigits = 5 и затем используйте numberOfDigits с boost :: format)

3

Решение

Возможно, вы можете изменить элементы форматирования, используя стандартные манипуляторы io:

int n = 5; // or something else

format fmt("%u");
fmt.modify_item(1, group(setw(n), setfill('0')));

С данным форматом, вы также можете добавить этот встроенный:

std::cout << format("%u") % group(std::setw(n), std::setfill('0'), 42);

DEMO

Жить на Колиру

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

using namespace boost;

int main(int argc, char const**) {
std::cout << format("%u") % io::group(std::setw(argc-1), std::setfill('0'), 42);
}

Где это печатает

0042

потому что он вызывается с 4 параметрами

1

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