如何在C 中打印中心对齐的字符串

任何人都可以帮我打印C中心对齐的string吗?

例如:

 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对齐到中心。

  Hello 

限制总长度为20。

先感谢您

通常,您可能希望避免居中对齐的文本,尤其是在控制台上,但无论如何; 这需要做一些事情。

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

使用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 , ' ' ); } 

如果你正在使用linux,你可以使用ncurses库到达终端中的一行并打印你的文本。

你可以,因为Williham Totland的答案显示只计算所需的空间,并使用printf 。 由于我正在刷新我的知识(尽管它有限),在内存管理方面,我想出了这个:

 #include  #include  #include  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); 

请注意,最后一个片段是事后的想法,整个答案也是如此,真的……无论如何, 请检查此键盘以查看它的实际效果

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

希望它能帮到你!