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