这个问题的核心是确定每一列文本的起始位置。一旦我们确定了所有列的起始位置 p1,p2,p3,…,我们就可以通过计算和填充空格来生成最终的输出。
首先,我们需要逐行读取输入。对于每一行,我们去除前导和后导的空格,然后使用一个或多个空格作为分隔符,将行分割成单词列表。一个二维的字符串数组(或列表的列表)是存储这些解析后的单词的理想数据结构,例如 lines[i][j] 表示第 i 行的第 j 个单词。
你正在参与“可定制编程代码生成器”的研发工作。该软件本质上是一个功能增强的文本编辑器。你现在正在处理一个模块:该模块接收包含定义或其他表格信息的代码片段,将每一列对齐到固定的重直位置,同时确保输出的代码尽可能短,仅保留绝对必要的空白字符。具体规则如下:
以此类推...
本题中的代码由多行组成。每行由一个或多个词组成,词之间用空格分隔。每个词可以包含大小写拉丁字母、所有ASCII标点符号、分隔符及其他非空白ASCII字符(ASCII码33至126)。空白字符仅指空格字符(ASCII码32)。
如下图是一个输入输出例子,例子中的'一'字符表示实际文本中的空格字符(ASCII码32)

输入文件包含一个或多个代码行,直到文件末尾。所有行(包括最后一行)均以文件的标准换行符结束。每行至少包含一个词,每个词长度为1到80个字符(含)。词之间用一个或多个空格分隔。代码行可能包含前导和后导空格。输入文件中每行最多180个字符,总行数不超过1000行。
将重新格式化后的对齐代码写入输出文件。输出需满足:
1.行数与输入相同,词的顺序保持不变
2.不包含前导和后导空格
3.通过一个或多个空格分隔词,使得每行的第i个词均从相同位置pi开始
输入
start:integer; // begins here
stop:integer; // ends here
s:string;
c:char;//temp
输出
start:integer; // begins here
stop:integer; // ends here
s:string;
c:char;//temp