How many spaces for tab character(\t)?
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 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.
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).