Hoeveel spaties voor tabteken(\t)?

Ik wil een teksttekenfunctie implementeren. Maar ik weet niet zeker hoe \t werkt, wat betekent dat ik niet weet hoeveel spaties ik moet afdrukken voor \t.

Ik heb het volgende algoritme bedacht:

a) Elke \t vertegenwoordigt maximaal NUMBER_OF_SPACES_FOR_TAB spaties.
b) Als \t in de laatste regel op een corresponderende positie verschijnt, moet \t voor deze regel worden uitgelijnd met de \t van de laatste lijn.

Voorbeeld:

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

Moet afdrukken:

a11112222b
34444c

Waar:

1.Nummer i staat voor de spaties van \t op positie i

2.NUMBER_OF_SPACES_FOR_TAB == 4

Kent iemand het standaardalgoritme? Bij voorbaat dank.


Antwoord 1, autoriteit 100%

Een tab-teken moet doorgaan naar de volgende tabstop. Historisch gezien waren tabstops elk 8e teken, hoewel kleinere waarden tegenwoordig algemeen worden gebruikt en de meeste editors kunnen worden geconfigureerd.

Ik zou verwachten dat uw uitvoer er als volgt uit zou zien:

123456789
a       b
        c

Het algoritme is om een ​​kolomtelling op nul te beginnen en deze vervolgens te verhogen voor elke tekenuitvoer. Wanneer u bij een tabblad komt, voert u n-(c%n) spaties uit waarbij c het kolomnummer is (gebaseerd op nul) en n is de tabafstand.


Antwoord 2, autoriteit 59%

Stel je een liniaal voor met tabstops om de 8 spaties. Een tabteken lijnt de tekst uit met de volgende tabstop.

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

Om te berekenen waar de volgende tabstop is, neem je de huidige column.

nextTabStop = (column + 8) / 8 * 8

Het deel / 8 * 8 kapt het resultaat effectief af tot het dichtstbijzijnde veelvoud van 8. Als u bijvoorbeeld in kolom 11 staat, is (11 + 8) 19 en 19 / 8 is 2 en 2 * 8 is 16. Dus de volgende tabstop van kolom 11 is in kolom 16.

In een teksteditor kunt u tabstops configureren met kleinere intervallen, zoals elke 4 spaties. Als je nabootst hoe tabbladen eruitzien op een terminal, moet je 8 spaties per tabblad gebruiken.


Antwoord 3, autoriteit 22%

Een tabteken verschuift naar de volgende tabstop. Standaard is er één per 8 spaties. Maar in de meeste shells kun je het gemakkelijk bewerken om het aantal spaties te hebben dat je wilt (profielvoorkeuren in linux, tabstop instellen in vim).

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes