代码对齐
该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
题目描述
实现一个代码列对齐功能,具体规则如下:
- 处理多行代码,每行由若干单词组成(单词间为一个或多个空格,行首/行尾可含空格),最终结果需去掉行首、行尾空格,单词顺序和行数保持不变。
- 第 列单词的起始位置固定为 。
- 第 列()单词的起始位置 取最小可能值,要求所有行的第 列单词的结束位置,都 。
- 最终每行的第 列单词,都在统一的 位置开始,仅保留对齐所需的必要空格,让整体代码最短。
输入格式
- 输入包含 至 行代码,每行至少包含 个单词。
- 单词长度为 字符,可包含大小写字母、ASCII 33-126 的非空白字符。
- 每行输入长度不超过 字符,单词间由一个或多个空格分隔,行首、行尾可包含空格,所有行(含最后一行)均以换行符结束。
输出格式
- 输出对齐后的代码,行数、单词顺序与输入完全一致,无行首、行尾空格。
- 每行的第 列单词必须在统一的 位置开始,仅保留对齐必需的空格,使整体代码长度最短。
样例输入 1
start: integer; // begins here
stop: integer; // ends here
s: string;
c: char; // temp
样例输出 1
start: integer; // begins here
stop: integer; // ends here
s: string;
c: char; // temp
样例输入 2
a b c
aa bb cc
aaa bbb ccc
aaaa bbbb cccc
样例输出 2
a b c
aa bb cc
aaa bbb ccc
aaaa bbbb cccc
样例解释
样例 1 解释
- 第 列单词分别为
start:、stop:、s:、c:,最长长度为 ,因此第 列起始位置 。 - 第 列单词分别为
integer;、integer;、string;、char;,最长长度为 ,因此第 列起始位置 。 - 第 列单词分别为
//、//、(无)、//,最长长度为 ,因此第 列起始位置 。 - 按上述 对齐后得到输出,所有列均左对齐且仅保留必要空格。
样例 2 解释
- 第 列最长单词为
aaaa(长度 ),故 。 - 第 列最长单词为
bbbb(长度 ),故 。 - 第 列最长单词为
cccc(长度 ),对齐后每行单词均从固定位置开始。