我想实现文本绘图功能.但我不确定\t它是如何工作的,这意味着我不知道应该打印多少个空格\t.
我想出了以下算法:
a)每个\t代表最多NUMBER_OF_SPACES_FOR_TAB空间.b)如果\t出现在相应位置的最后一行,则\t该行应与\t最后一行对齐.
例:
printf("a\t\tb\n");
printf("\t\tc\n");
Run Code Online (Sandbox Code Playgroud)
应打印:
a11112222b
34444c
Run Code Online (Sandbox Code Playgroud)
哪里:
1.Number i表示\t位置的空格i
2.NUMBER_OF_SPACES_FOR_TAB == 4
有谁知道标准算法?提前致谢.
Mar*_*som 26
制表符应前进到下一个制表位.历史上,制表位是每8个字符,虽然现在常用较小的值,但可以配置大多数编辑器.
我希望你的输出看起来如下:
123456789
a b
c
Run Code Online (Sandbox Code Playgroud)
算法是将列计数开始为零,然后为每个字符输出递增.当您到达选项卡时,输出n-(c%n)空格,其中c是列号(基于零)并且n是制表符间距.
编辑:我原来的公式错了一年多了,没有人打电话给我.抱歉.现在已经修好了.
Joh*_*ica 14
想象一下每8个空格有一个制表位的标尺.制表符将文本与下一个制表位对齐.
0 8 16 24 32 40
|.......|.......|.......|.......|.......|
printf("\tbar\n"); \t bar
printf("foo\tbar\n"); foo\t bar
printf("longerfoo\tbar"); longerfoo\t bar
Run Code Online (Sandbox Code Playgroud)
要计算下一个制表位的位置,请选择当前的制表位column.
nextTabStop = (column + 8) / 8 * 8
Run Code Online (Sandbox Code Playgroud)
该/ 8 * 8部分有效地将结果截断为最接近的8的倍数.例如,如果您在第11列,则(11 + 8)为19,19/8为2,而2*8为16.所以下一个选项卡第11列的停止位于第16列.
在文本编辑器中,您可以将制表位配置为较小的间隔,例如每4个空格.如果您正在模拟终端上的标签,您应该在每个标签上留出8个空格.
制表符转换到下一个制表位.默认情况下,每8个空格一个.但在大多数shell中,您可以轻松地将其编辑为您想要的任意数量的空间(Linux中的配置文件首选项,在vim中设置tabstop).