简体   繁体   中英

How many spaces for tab character(\t)?

I want to implement a text drawing function. But I am not sure how \\t works, which means I don't know how many spaces I should print for \\t .

I have come up with the following algorithm:

a) Each \\t represents at most NUMBER_OF_SPACES_FOR_TAB spaces. b) If \\t appears in the last line at a corresponding position, \\t for this line should be aligned to the \\t of last line.

Example:

printf("a\t\tb\n");
printf("\t\tc\n");

Should print:

a11112222b
34444c

Where:

1.Number i represents the spaces of \\t at position i

2. NUMBER_OF_SPACES_FOR_TAB == 4

Does anyone know the standard algorithm? Thanks in advance.

A tab character should advance to the next tab stop . Historically tab stops were every 8th character, although smaller values are in common use today and most editors can be configured.

I would expect your output to look like the following:

123456789
a       b
        c

The algorithm is to start a column count at zero, then increment it for each character output. When you get to a tab, output n-(c%n) spaces where c is the column number (zero based) and n is the tab spacing.

Imagine a ruler with tab stops every 8 spaces. A tab character will align text to the next tab stop.

                                0       8       16      24      32      40
                                |.......|.......|.......|.......|.......|
printf("\tbar\n");              \t      bar
printf("foo\tbar\n");           foo\t   bar
printf("longerfoo\tbar");       longerfoo\t     bar

To calculate where the next tab stop is, take the current column .

nextTabStop = (column + 8) / 8 * 8

The / 8 * 8 part effectively truncates the result to the nearest multiple of 8. For example, if you're at column 11, then (11 + 8) is 19 and 19 / 8 is 2, and 2 * 8 is 16. So the next tab stop from column 11 is at column 16.

In a text editor you may configure tab stops to smaller intervals, like every 4 spaces. If you're simulating what tabs look like at a terminal you should stick with 8 spaces per tab.

A Tab character shifts over to the next tab stop. By default, there is one every 8 spaces. But in most shells you can easily edit it to be whatever number of spaces you want (profile preferences in linux, set tabstop in vim).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM