我使用这样的代码来打印表格
print "\t1%s\t2%s\t3%s\t4%s", str1, str2, str3, str4
但是,有些str宽度有点长,它的输出是这样的
1blabla 2blabla 3blabla 4blabla
1blablablabla 2blabla 3blabla 4blabla
有更好的方法来格式化这些字符串吗?
最佳答案
首先,对于每一列,确定显示每个元素所需的最大长度,例如通过迭代列条目并找到最大值 strlen()
。然后,对于每一行,打印相应的列条目并根据需要用空格填充。
这是一个漂亮的 C 语言打印机,它采用指向字符串的指针的 2D 数组(其中每个“行”都以 NULL
结尾,最后一行由所有 NULL
组成) >s):
void print_pretty(char ***arr)
{
int i, j, cols;
/* count columns */
j = cols = 0;
while (arr[0][j++]) cols++;
/* init column sizes */
size_t sizes[cols];
for (j = 0; j < cols; sizes[j++]=0);
/* 1st pass: calculate column widths */
for (i = 0; arr[i][0]; i++)
for (j = 0; arr[i][j]; j++)
if (strlen(arr[i][j]) > sizes[j])
sizes[j] = strlen(arr[i][j]);
/* 2nd pass: print table */
for (i = 0; arr[i][0]; i++) {
for (j = 0; arr[i][j]; j++)
printf("%-*2$s ", arr[i][j], sizes[j]);
puts("");
}
}
最丑陋的部分是 C99 可变大小数组和调用 printf()
中的格式说明符。此外,您还可以优化掉一个 strlen()
。
输出如下:
foo bar baz
snafu fubar x
关于c++ - 如何在 CLI 中打印表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10308013/