制表符(\ t)有多少个空格?

时间:2012-10-26 21:28:41

标签: c++ c printf

我想实现文本绘图功能。但我不确定\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

有谁知道标准算法?提前谢谢。

3 个答案:

答案 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)。