如何打印中心对齐字符串C [复制](How do I print center aligned st

2019-10-18 19:15发布

这个问题已经在这里有一个答案:

  • 围绕字符串与printf()的 7个答案

谁能帮我在打印string对准C到中心?

例如:

int main()
{
    int a = 20;
    char x[10] = "Hello";
    char y[10] = "Hello";
    printf ("%*s\n",a, x );
    printf ("%-*s\n",a,y);
}

在第一个版画上述Hello右对齐和第二printf像这样左

                    Hello
Hello  

限制为每个至20的长度。

有没有一种方法来打印你好居中对齐。

        Hello              

限制的总长度为20。

先感谢您

Answer 1:

在一般情况下,你可能要避免居中的文本,特别是在控制台上,但在任何情况下; 这将需要一些做。

将(可能)原因的printf不知道如何做到这一点,开始用的是它不是一个完全确定的操作; 不是所有的字符串可以在所有的空间中居中。

值得注意的是,除非space_for_string - strlen(string)是偶数,你将有权对你想要的字符串,转移到一个选择。

在任何情况下,你想使用"%*s"说明符,但你送入宽领域的数不能为扁平简单20

相反,你想给它喂食你的空间的宽度的一半加上您的字符串的宽度的一半

int main()
{
  int space = 20;
  char *string = "Hello";
  printf ("%*s\n", space / 2 + strlen(string) / 2,string);
}


Answer 2:

没有标准化的方式与C做这个stdio库。 你将不得不编写自己的代码做到这一点的*printf电话或用自己printf格式说明。

这是做一个快速和肮脏的方式:

int main()
{
    int a = 20;
    char x[] = "Hello";

    int length = strlen(x);

    printf ("%*s%*c"
            ,((a - length) >> 1) + length // string length + padding spaces
            , x
            , ((a - length) >> 1) + ((a - length) & 1) // tailing spaces
            , ' '
    );
}


Answer 3:

您可以使用ncurses图书馆去在终端线的中心和打印的文字,如果你在Linux上工作。



Answer 4:

你可以,作为Williham托特兰的答案却与此计算所需的空间和使用printf 。 自从我在刷新我的知识的过程是(限制虽然是),内存管理,我想出了这一点:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    int a = 20;
    char x[10] = "Hello";
    char *spaces_ptr;//padding str pointer
    a = (a-strlen(x))/2;
    //allocate the required mem, calloc ensures zero terminated
    spaces_ptr = calloc(a + 1, sizeof(char));
    memset(spaces_ptr, ' ', a);//set a chars to hold spaces
    //print
    printf("%s%s", spaces, x);
    free(spaces);//free memory
    return 0;
}

使用sprintfstrncat是一个选项,也当然...甚至:

char *fullStr = calloc(strlen(x) + a + 1, sizeof(char));
memset(fullStr, ' ', a);
strncpy(fullStr+a, x, strlen(x));
puts(fullStr);
free(fullStr);

请注意,这最后的片段是在事后,因为是一个完整的答案,真的......反正检查此键盘,看看它在行动



Answer 5:

看看我的小库: libTprint ,代码是很简单的,你应该能够理解它是如何对齐文本。

希望它可以帮助你!



文章来源: How do I print center aligned string in C [duplicate]