web-dev-qa-db-fra.com

Combien d'espaces pour le caractère de tabulation (\ t)?

Je veux implémenter une fonction de dessin de texte. Mais je ne sais pas comment \t fonctionne, ce qui signifie que je ne sais pas combien d'espaces je dois imprimer pour \t.

J'ai trouvé l'algorithme suivant:

a) Chaque \t représente au plus NUMBER_OF_SPACES_FOR_TAB les espaces. b) Si \t apparaît sur la dernière ligne à une position correspondante, \t pour cette ligne doit être aligné sur le \t de la dernière ligne.

Exemple:

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

Devrait imprimer:

a11112222b
34444c

Où:

1.Number i représente les espaces de \t à la position i

2 .NUMBER_OF_SPACES_FOR_TAB == 4

Quelqu'un connaît-il l'algorithme standard? Merci d'avance.

17
Chao Zhang

Un caractère de tabulation doit passer au suivant tabulation. Historiquement, les taquets de tabulation étaient tous les 8 caractères, bien que des valeurs plus petites soient couramment utilisées aujourd'hui et la plupart des éditeurs puissent être configurés.

Je m'attendrais à ce que votre sortie ressemble à ceci:

123456789
a       b
        c

L'algorithme consiste à démarrer un décompte de colonnes à zéro, puis à l'incrémenter pour chaque sortie de caractère. Lorsque vous accédez à un onglet, affichez n-(c%n) espaces où c est le numéro de colonne (basé sur zéro) et n est l'espacement des tabulations.

Edit: La formule que j'avais à l'origine était incorrecte depuis plus d'un an, et personne ne m'a appelé à ce sujet. Pardon. C'est réparé maintenant.

26
Mark Ransom

Imaginez une règle avec des tabulations tous les 8 espaces. Un caractère de tabulation alignera le texte sur le taquet de tabulation suivant.

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

Pour calculer l'emplacement du prochain taquet de tabulation, prenez le column actuel.

nextTabStop = (column + 8) / 8 * 8

Le / 8 * 8 part tronque efficacement le résultat au multiple de 8. Par exemple, si vous êtes à la colonne 11, alors (11 + 8) est 19 et 19/8 est 2, et 2 * 8 est 16. Ainsi, le suivant la tabulation de la colonne 11 se trouve à la colonne 16.

Dans un éditeur de texte, vous pouvez configurer des taquets de tabulation à des intervalles plus petits, comme tous les 4 espaces. Si vous simulez à quoi ressemblent des onglets sur un terminal, vous devez vous en tenir à 8 espaces par onglet.

14
John Kugelman

Un caractère de tabulation passe à la tabulation suivante. Par défaut, il y en a un tous les 8 espaces. Mais dans la plupart des shells, vous pouvez facilement le modifier pour obtenir le nombre d'espaces que vous souhaitez (préférences de profil sous linux, définir tabstop dans vim).

5
Whyrusleeping