#CPP20. 【Level 2】全新的 C++ 之 format
【Level 2】全新的 C++ 之 format
format
千呼万唤始出来!C++ 20 终于将 format
纳入标准库,但由于编译这一特性需要支持 --std=c++20
的编译器,因此 C++20 特性在实际项目开发中的普遍使用还有待时日。
基本用法
将参数插入到格式字符串中,如果你掌握 Python
将会对这一操作非常熟悉
int year = 2024;
string message = format("The year is {}", year);
cout << message << endl; // 输出: The year is 2024
可以同时传递多个参数,并指定插入的位置
string name = "Alice";
int age = 30;
cout << format("{} is {} years old.", name, age) << endl;
// 输出: Alice is 30 years old.
甚至可以手动指定插入的位置,例如
string name1("Alice"), name2("Bob");
cout << std::format("hello, {1} and {0}!", name1, name2) << endl;
// hello, Bob and Alice!
指定格式
可以指定数值的格式,例如整数的进制、浮点数的精度等。
整数:二进制 b
,八进制 o
,十进制 d
,十六进制 x/X
int num = 255;
double PI = 3.14159;
// 输出整数的十六进制格式
cout << format("Hex: {:x}", num); // 输出: Hex: ff
cout << format("Hex: {:#x}", num) << endl; // 输出: Hex: 0xff
// 设置浮点数的精度
cout << format("Pi: {:.2f}", PI) << endl; // 输出: Pi: 3.14
// 科学计数法输出浮点数
cout << format("Pi: {:.5e}", PI) << endl; // 输出: Pi: 3.14159e+00
填充对齐
控制格式化后的字符串的对齐方式,并使用字符填充指定的宽度
double num = 123.456;
cout << format("{:10.2f}", num) << endl; // 输出: " 123.46"
// 最小宽度为10,小数点后保留两位
string asterisks(7, '*'); // 初始化为 7 个 *
cout << format("{:10}-{:10}-", asterisks, asterisks) << endl;
cout << format("{:<10} is left aligned.", "left") << endl; // 左对齐
cout << format("{:>10} is right aligned.", "right") << endl; // 右对齐
cout << format("{:^10} is centered.", "center") << endl; // 居中
cout << format("{:*^10} is centered.", "center") << endl; // 居中,并用 '*' 填充
输出如下所示
123.46
******* -******* -
left is left aligned.
right is right aligned.
center is centered.
**center** is centered.
Format
你需要编写一个程序,处理两个任务:
- 格式化输出一系列整数和浮点数。
- 使用这些数值绘制一个字符图形,根据数值来控制图形的宽度或高度。
要求:
- 所有整数以固定宽度 输出,并且右对齐。
- 所有浮点数保留两位小数,宽度为 ,右对齐。
- 输出的数值之间用一个空格分隔。
- 输出一个由字符 构成的 行 列的矩形。
Input
第一行是三个整数 、 和 。分别表示输出字符矩形的行数、列数,以及待格式化数的个数。
第二行是 个数(整数或浮点数)。
Output
第一行是若干个格式化后的数值。
第二行开始直到结束,输出一个由字符 构成的 行 列的矩形。
Samples
4 6 3
123 4567 12.345
123 4567 12.35
******
******
******
******
3 5 2
1.2345 678
1.23 678
*****
*****
*****
Related
In following contests: