如何在C中打印居中对齐的字符串
有人能帮我打印C中对齐的如何在C中打印居中对齐的字符串,c,printf,centering,stdio,C,Printf,Centering,Stdio,有人能帮我打印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
字符串吗
例如:
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
提前谢谢使用Cstdio
库没有标准化的方法来实现这一点。您必须编写自己的代码才能使用*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
, ' '
);
}
对于Cstdio
库,没有标准化的方法来实现这一点。您必须编写自己的代码才能使用*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
, ' '
);
}
一般来说,您可能希望避免使用居中对齐的文本,尤其是在控制台上,但无论如何;这需要一些努力
printf不知道如何开始的(可能的)原因是它不是一个完全确定的操作;并非所有字符串都可以在所有空间中居中
值得注意的是,除非space\u for_string-strlen(string)
是一个偶数,否则您必须选择要将字符串移动到的位置
在任何情况下,您都希望使用“%*s”
说明符,但输入宽度字段的数字不能像平面20
那么简单
相反,您希望将空间的一半宽度加上字符串的一半宽度提供给它
一般来说,您可能希望避免使用居中对齐的文本,尤其是在控制台上,但无论如何;这需要一些努力
printf不知道如何开始的(可能的)原因是它不是一个完全确定的操作;并非所有字符串都可以在所有空间中居中
值得注意的是,除非space\u for_string-strlen(string)
是一个偶数,否则您必须选择要将字符串移动到的位置
在任何情况下,您都希望使用“%*s”
说明符,但输入宽度字段的数字不能像平面20
那么简单
相反,您希望将空间的一半宽度加上字符串的一半宽度提供给它
若您在linux上工作,那个么您可以使用该库到达终端中的一行中心并打印文本 如果您在linux上工作,您可以使用library到达终端中一行的中心并打印文本 正如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;
}
请注意,最后一个片段是事后思考,整个答案也是如此,真的。。。无论如何您可以,正如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;
}
请注意,最后一个片段是事后思考,整个答案也是如此,真的。。。无论如何看看我的微型库:,代码非常简单,您应该能够理解它是如何对齐文本的
希望它能帮助你 看看我的微型库:,代码非常简单,您应该能够理解它是如何对齐文本的
希望它能帮助你 +1用于使用火箭筒杀死苍蝇:P@AlterMann:更像战术热核装置。+1用于使用火箭筒杀死苍蝇:P@AlterMann:更像是战术热核装置。您在秒printf
格式说明符中忘记了小s
。感谢您0xF1的建议编辑。您在秒中忘记了小s
printf
格式说明符。感谢您0xF1的建议编辑。感谢您的回答Williham Totland谢谢您的回答Williham Totland