如何使用 iomanip 设置 std::string 的最大字段宽度?
How to set maximum field width for a std::string with iomanip?
std::setw()
设置所有输出的最小字段宽度,std::setprecision()
能够影响浮点数,但是有没有办法设置 std::string
的最大字段宽度,获得与以下 printf()
格式说明符相同的结果:%10.10s
我知道 boost::format
可能能够做到这一点,但我正在寻找一种仅符合 C++ 标准的解决方案,没有第三方软件。
没有使用 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
也许是这个?
std::string string_w(char *c_str, int width)
{
int pad = width - strlen(c_str);
return (std::string(c_str) + std::string(pad > 0 ? pad : 0, ' ')).substr(0,width);
}
std::setw()
设置所有输出的最小字段宽度,std::setprecision()
能够影响浮点数,但是有没有办法设置 std::string
的最大字段宽度,获得与以下 printf()
格式说明符相同的结果:%10.10s
我知道 boost::format
可能能够做到这一点,但我正在寻找一种仅符合 C++ 标准的解决方案,没有第三方软件。
没有使用 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
也许是这个?
std::string string_w(char *c_str, int width)
{
int pad = width - strlen(c_str);
return (std::string(c_str) + std::string(pad > 0 ? pad : 0, ' ')).substr(0,width);
}