我正在尝试将这些字符串与其各自的索引对齐。字符串如下所示:

char *mystrings[] = {"Fred", "Augustine", "Bob", "Lenny", "Ricardo"};

我的输出如下所示:
Fred 0
Augustine 1
Bob 2
Lenny 3
Ricardo 4

但我在追求这样的事情:
Fred       0
Augustine  1
Bob        2
Lenny      3
Ricardo    4

因此索引对齐相同。我只是想让它更具可读性。这是我的代码到目前为止的样子:
#include <stdio.h>
#include <stdlib.h>

int
main(void) {
    int i;
    char *mystrings[] = {"Fred", "Augustine", "Bob", "Lenny", "Ricardo"};

    for (i = 0; i < 5; i++) {
        printf("%s %d\n", mystrings[i], i);
    }

    return 0;
}

有没有办法做到这一点?比如将索引与最长的字符串进行比较,然后像这样为整数留出空格?

最佳答案

计算最大宽度的额外循环,然后使用 * printf 标志从参数中获取宽度(乘以 -1 导致左对齐)

char *mystrings[] = {"Fred", "Augustine", "Bob", "Lenny", "Ricardo"};
int width = 0;
for (int i = 0; i < sizeof(mystrings)/sizeof(char*); i++) {
    width = strlen(mystrings[i]) > width? strlen(mystrings[i]) : width;
}

for (int i = 0; i < sizeof(mystrings)/sizeof(char*); i++) {
    printf("%*s %d\n", -1 * width, mystrings[i], i);
}

10-07 21:55