如何使用iomanip设置std :: string的最大字段宽度?

时间:2018-06-19 16:04:28

标签: c++ formatting iostream

std::setw()设置所有输出的最小字段宽度,并且std::setprecision()能够影响浮点数,但是有一种方法可以设置std::string的最大字段宽度,以实现结果与以下printf()格式说明符相同:%10.10s

我知道boost::format可能能够做到这一点,但是我正在寻找一种严格的解决方案,该解决方案仅是C ++标准,没有第三方软件。

1 个答案:

答案 0 :(得分:3)

没有使用C ++流执行此操作的内置方法。一种方法是使用std::string_view来获取想要的切片

#include <iostream>
#include <string_view>

std::string_view print_max(std::string_view sv, std::size_t width)
{
    return sv.substr(0, width);
}


int main()
{
    std::cout << print_max("0123456789", 3) << "\n";
    std::cout << print_max("0123456789", 5) << "\n";
    std::cout << print_max("0123456789", 8) << "\n";
    std::cout << print_max("0123456789", 20);
}

输出:

012
01234
01234567
0123456789