任何人都可以帮我打印与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.
提前谢谢
答案 0 :(得分:3)
通常,您可能希望避免居中对齐的文本,尤其是在控制台上,但无论如何;这需要做一些。
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);
}
答案 1 :(得分: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
, ' '
);
}
答案 2 :(得分:1)
如果您正在使用linux,可以使用ncurses
库到达终端中心线并打印文本。
答案 3 :(得分:1)
你可以,因为Williham Totland的回答显示只计算所需的空格,并使用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);
请注意,最后一个片段是事后的想法,整个答案也是如此,真的......无论如何...... check this codepad to see it in action
答案 4 :(得分:0)
看看我的小型库:libTprint,代码非常简单,您应该能够理解它是如何对齐文本的。
希望它可以帮到你!