Как использовать 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::)


person user3731622    schedule 20.11.2014    source источник


Ответы (1)


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

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);

ДЕМО

Жить на Coliru

#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 параметрами

person sehe    schedule 20.11.2014
comment
Спасибо. Замечательно. Я дам ему немного больше времени, прежде чем приму его как ответ, потому что я хотел бы посмотреть, могут ли другие люди также дать хорошие ответы. - person user3731622; 21.11.2014
comment
Хороший вопрос и отличный ответ. Странно, почему так мало голосов. - person Zhang; 16.05.2021