这次您的任务是实现POSIX expand(1)
实用程序的变体,该实用程序将制表符扩展为空格。
您的程序将采用制表符规范,然后读取标准输入中的输入,并用适当的空格量替换输入中的制表符以到达下一个制表符。结果应写入标准输出。
制表符规格
制表符规范由一个数字或一个逗号分隔的制表符列表组成。在单个数字的情况下,将其重复,就好像它的倍数出现在以逗号分隔的列表中一样(即4
充当4,8,12,16,20,...
)。逗号分隔列表中的每个条目都是一个正整数,可以选择以前缀+
。甲+
前缀表示在逗号分隔列表中的先前的值的相对差。列表中的第一个值必须是绝对值(即无前缀)。制表符指定下一个非空格字符的列(在扩展的制表符之后),最左边的列作为数字0。制表符应始终扩展到至少一个空格。
输入输出
您可以自行决定将Tabstop规范用作程序的第一个命令行参数,或者从标准中读取作为第一行输入(由换行符终止)。读取制表符后,将处理和扩展剩余的输入(在前一种情况下为所有输入),直到EOF为止。扩展后的输出应写入标准输出。
假定所有扩展的制表位和所有输入的最大宽度为80列。所有扩展的制表符都在严格增加。
例
Tabstop规范4,6,+2,+8
等效于4,6,8,16
,并且两者都输入
ab<Tab>c
<Tab><Tab>d<Tab>e<Tab>f
扩展为(␣
表示空格)
ab␣␣c
␣␣␣␣␣␣d␣e␣␣␣␣␣␣␣f
01234567890123456 (Ruler for the above, not part of the output)
1111111
评分是纯粹的代码高尔夫;最短的代码胜出。
x+($1?i:0)
较短的$1?x+i:x
吗?