使用printf()居中字符串

Pie*_*ter 23 c printf

默认情况下,printf()似乎将字符串对齐到右侧.

printf("%10s %20s %20s\n", "col1", "col2", "col3");
/*       col1                 col2                 col3 */
Run Code Online (Sandbox Code Playgroud)

我也可以像这样对齐左边的文字:

printf("%-10s %-20s %-20s", "col1", "col2", "col3");
Run Code Online (Sandbox Code Playgroud)

有没有快速的方法来中心文本?或者,如果该列的文本宽度为8,我是否必须编写一个将字符串test转换为的函数(space)(space)test(space)(space)

Giu*_*ini 29

printf本身不能做到这一点,但你可以使用"间接"宽度,它通过从参数中读取宽度来指定宽度.让我们尝试一下(好吧,不完美)

void f(char *s)
{
        printf("---%*s%*s---\n",10+strlen(s)/2,s,10-strlen(s)/2,"");
}
int main(int argc, char **argv)
{
        f("uno");
        f("quattro");
        return 0;
}
Run Code Online (Sandbox Code Playgroud)


cle*_*ght 6

@GiuseppeGuerrini的功能非常有用,它建议使用打印格式说明符并划分空格。不幸的是,它可以截断文本。

以下内容解决了截断问题(假设指定的字段实际上足够大以容纳文本)。

void centerText(char *text, int fieldWidth) {
    int padlen = (fieldWidth - strlen(text)) / 2;
    printf(%*s%s%*s\n", padLen, "", text, padlen, "");
} 
Run Code Online (Sandbox Code Playgroud)

  • 请注意,根据 `fieldWidth - strlen(text)` 是偶数还是奇数,生成的总宽度会有所不同 (3认同)