我正在尝试将这些字符串与其各自的索引对齐。字符串如下所示:
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);
}