À l'aide de printf, à gauche et à droite justifier de deux chaînes d'une longueur donnée
L'aide de printf en C ou en shell Bash, comment puis-je - gauche et droit-justifier de deux chaînes de caractères (des tableaux de caractères) à une longueur donnée?
E. g. si les cordes sont "pile" et "dépassement", et la longueur est de 20 caractères, je souhaite imprimer
stack-------overflow
(pour plus de clarté, chaque espace est représenté comme un tableau de bord).
Les chaînes sont de longueur inconnue. Si la longueur totale + 1 dépasse la longueur de la donnée, est-il possible de tronquer une ou deux chaînes direction donnée et laisser un espace entre eux? E. g. si la longueur est de 10, peut-on obtenir un de ces?
stack-over
stack-flow
s-overflow
k-overflow
Je sais que printf("%10s", string) justifie une chaîne à droite et printf("%-10s", string) justifie une chaîne à gauche, mais ne peut pas trouver un moyen de justifier de 2 chaînes de caractères, ou de les tronquer.
OriginalL'auteur Gnubie | 2012-09-28
Vous devez vous connecter pour publier un commentaire.
C'est plus que de la batterie, mais à mon humble avis il divise les chaînes de mieux. Aussi, il utilise printf pour la troncation, si possible, de revenir à d'autres mécanismes que pour la main gauche de la troncature de la deuxième argument.
Bash:
C:
Exemple de sortie:
Avertissement: L'arithmétique peut débordement, dans ce cas, la sortie sera mal (ou, si vous pouvez vous arranger pour strlen(a)+strlen(b) à être exactement 2^64 octets, le programme SIG_FPE). Je peux fournir une explication pour le adj_a et adj_b calculs si quelqu'un se soucie.
OriginalL'auteur rici
Vous devrez écrire votre propre fonction pour le faire. Voici un exemple sans et une avec un facile de troncature. Pour la troncature vous aurez besoin de définir quelques règles de base de la troncature sur.
OriginalL'auteur Minion91
Je ne pense pas que vous pouvez le faire en une seule opération, en particulier la troncature de la partie. Notez que, par exemple,
printf("%2s", "hello");
sera pas tronquée, dans C. La largeur de champ seulement pour le rembourrage, pas tronquer.Vous aurez probablement besoin de mettre en œuvre une fonction personnalisée pour ce faire, quelque chose comme cela dans C:
printf %.2s Silohace
tronque en bash.OriginalL'auteur unwind
Dans Bash:
Vous pourriez souhaitez modifier le core de
while
boucle de raccourcir les chaînes de la même façon si elles ne correspondent pas.Quelques conseils:
${#a}
donne la longueur de$a
${a:s:n}
retournen
personnages de$a
commençant à l'indexs
(0). Sin
est omis, puis il renvoie le tout jusqu'à la fin de la chaîne.OriginalL'auteur battery