如何使用 boost::format 对变量中包含小数位数的数字进行零填充?

问题描述 投票:0回答:2

我想对一个数字进行零填充,使其具有 5 位数字并将其作为字符串获取。 这可以通过以下方式完成:

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

但是,我不想对位数进行硬编码(即“%05u”中的 5)。

如何使用 boost::format,但通过变量指定位数?

(即,将位数放入

unsigned int numberOfDigits = 5
,然后使用 numberOfDigits 和 boost::format)

c++ boost zero-pad boost-format
2个回答
2
投票

也许您可以使用标准 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);

演示

住在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 个参数调用的


0
投票

您也可以使用 boost::format 构建格式字符串('''%%0%uu''' 扩展为 '''%5u'''):

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

using namespace boost;

int main(int argc, char const**) {
  unsigned int theNumber = 10;
  unsigned int numberOfDigits = 5;
  std::string fmtStr = (boost::format("%%0%uu") % numberOfDigits).str();
  std::string theZeropaddedString = (boost::format(fmtStr) % theNumber).str();
  std::cout << theZeropaddedString << std::endl; // 00010
}

现场演示

© www.soinside.com 2019 - 2024. All rights reserved.