c - 均匀对齐字符串

标签 c

我试图将这些字符串与其各自的索引对齐。字符串看起来像这样:

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);
}

关于c - 均匀对齐字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39523267/

相关文章:

c - 使用 get() 返回静态结构数组指针

c - 是否有一个C代码片段,可以在不使用编译器内置函数的情况下有效地计算溢出安全加法?

c - 二叉树的层序遍历

c - 不完整类型 'void' 不可分配 c

c++ - if-else 语句中的 "equal to"与 "not equal to"运算符

c - 尝试实现游戏循环以限制最大 fps 时的无限循环

c - 如何将程序拆分为多个包含一个 .h 和几个 .c 文件的文件?

c++ - 用于检查 C/C++ 代码约定的自动工具

c++ - C 中的结构出现问题,处于不正确结果的边缘

c++ - freemodbus eMBRegCoilsCB 函数体示例