#include <stdio.h>
void align_string(const char* str, char alignment) {
int col, i;
int width[512] = { 0 };
const char* s;
for (s = str, i = col = 0; s[i]; s += i + 1) {
for (i = 0; s[i] && s[i] != '~' && s[i] != '\n'; i++);
if (i > width[col]) width[col] = i;
if (col++ >= 512) return;
if (s[i] == '\n') col = 0;
if (!s[i]) break;
}
int l = 0, r = 0;
for (s = str, i = col = 0; s[i]; s += i + 1) {
for (i = 0; s[i] && s[i] != '~' && s[i] != '\n'; i++);
switch (alignment) {
case 'l': r = width[col] - i; break;
case 'c': r = (width[col] - i) / 2; break;
case 'r': r = 0; break;
}
l = width[col++] - i - r + 1;
while (l--) putchar(' ');
printf("%.*s", i, s);
while (r--) putchar(' ');
if (s[i] != '~') {
putchar('\n');
col = 0;
}
if (!s[i]) break;
}
}
int main(void)
{
const char* str =
"C~R~C#~C++~Go~Java~Python~Rust~Dart~VB~Pascal~\n"
"JavaScript~Swift~PHP~Fortran~SQL~Kotlin~MATLAB~Swift~Ruby~Simula~COBOL~\n"
"Scala~ALGOL~Amiga E~Delphi~Elixir~F~Assembly~JavaFX~LINQ~\n"
"NodeJS~TypeScript~Modula~Objective-C";
align_string(str, 'r');
return 0;
}
/*
run:
C R C# C++ Go Java Python Rust Dart VB Pascal
JavaScript Swift PHP Fortran SQL Kotlin MATLAB Swift Ruby Simula COBOL
Scala ALGOL Amiga E Delphi Elixir F Assembly JavaFX LINQ
NodeJS TypeScript Modula Objective-C
*/