Simplified {fmt}
题目描述
Python的format函数提供了一种比printf更灵活、功能更全面的字符串格式化方法。
例如,给定一个待格式化的字符串:
The contrapositive of “Given {2}, If {0} then {1}” is “Given {2}, If not {1} then not {0}”.
其中的{0}
和{1}
表示 格式限定符 。{0}
表示用第一个参数(下标从0开始计数)填充该位置,{1}
表示用第二个参数填充,以此类推。若给定第一个参数为a<b
,第二个参数为ca<cb
,第三个参数为c is a positive real value
,则格式化之后的字符串为
The contrapositive of “Given c is a positive real value, If a<b then ca<cb” is “Given c is a positive real value, If not ca<cb then not a<b”.
format函数的格式限定符还支持调整输出宽度、浮点数精度、对齐位置等,本题并不涉及。若要输出花括号{
或}
本身,则要在待格式化字符串中将花括号连写两次。例如{{0}}={0}
,第一个参数为Hello World
,则格式化的结果为{0}=Hello World
。
现给定若干行待格式化的字符串,以及若干个参数,请输出格式化之后的结果。
输入格式
第一行是两个正整数\(N,K\),表示有\(N\)行字符串待格式化,有\(K\)个参数。
之后\(N\)行是待格式化的字符串,其中包含大小写字母、数字、标点和空格。
再之后\(K\)行字符串表示参数,其中包含大小写字母、数字、标点,不包含空格。
保证输入的待格式化字符串满足以下要求:
1. 格式限定符必然是左、右花括号配对,括号内只有数字,没有其他任何字符;
2. 输出花括号本身时,保证输入数据中花括号字符连写了两次。
输出格式
\(N\)行,格式化之后的文本。
样例1
输入
1 5
{1}{0}{3}{0}{1}
Alice
Bob
Cindy
Daniel
Emily
输出
BobAliceDanielAliceBob
样例2
输入
7 5
#include {0}
int main()
{{
scanf("{1}", &{2}, &{3});
printf("{4}", {2} + {3});
return 0;
}}
<stdio.h>
%d%d
a
b
{2}+{3}=%d\n
输出
#include <stdio.h>
int main()
{
scanf("%d%d", &a, &b);
printf("{2}+{3}=%d\n", a + b);
return 0;
}
样例3
输入
1 1
{0} spaces -> <- {0} spaces
8
输出
8 spaces -> <- 8 spaces
样例说明
样例2中,参数内的“格式限定符”看成普通的字符串,不做特殊处理。
数据规模及约定
\(N \le 100, \quad K \le 10^4\),每行长度\(\le 100\)。
本题共10组数据文件,部分测试文件满足如下附加限制:
测试点#1:\(K \le 10\),行内不含空格,不存在输出花括号本身的情况(即待格式化字符串中不会出现{{
或}}
)
测试点#2:\(K \le 10\),行内不含空格
测试点#3:\(K \le 10\),不存在输出花括号本身的情况
测试点#4~5:\(K \le 10\)
测试点#6~7:不存在输出花括号本身的情况
时空限制
时间限制1s,空间限制64MB。
来源
原创题。
ps.已经有大牛将Python format移植到了C++上,并且有望成为C++20标准库的一部分。链接:http://fmtlib.net/latest/index.html