谁能帮我在打印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。
先感谢您
在一般情况下,你可能要避免居中的文本,特别是在控制台上,但在任何情况下; 这将需要一些做。
将(可能)原因的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
, ' '
);
}
您可以使用ncurses
图书馆去在终端线的中心和打印的文字,如果你在Linux上工作。
你可以,作为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;
}
使用sprintf
或strncat
是一个选项,也当然...甚至:
char *fullStr = calloc(strlen(x) + a + 1, sizeof(char));
memset(fullStr, ' ', a);
strncpy(fullStr+a, x, strlen(x));
puts(fullStr);
free(fullStr);
请注意,这最后的片段是在事后,因为是一个完整的答案,真的......反正检查此键盘,看看它在行动
看看我的小库: libTprint ,代码是很简单的,你应该能够理解它是如何对齐文本。
希望它可以帮助你!