【发布时间】:2012-07-11 00:42:33
【问题描述】:
我用过一次
setlocale(LC_ALL, ""); //use system locale
printf 函数未正确对齐。如何在不同的语言环境中对齐字符串?
【问题讨论】:
-
请发布您正在使用的完整示例 + 编译器 + 操作系统
-
OP的问题不是很清楚,但我想我能够弄清楚预期的含义。
我用过一次
setlocale(LC_ALL, ""); //use system locale
printf 函数未正确对齐。如何在不同的语言环境中对齐字符串?
【问题讨论】:
字段宽度不能用于现代多语言系统上的对齐。即使printf 可以在对齐时计算字符而不是字节(注意:宽 printf-family 函数可以做到这一点),这将无法适应组合字符(通常不使用水平空间)以及 CJK-宽字符(通常在终端上使用 2 列)。
我能想到的最佳方法是首先将您的字符串转换为wchar_t 字符串,然后使用wcswidth 确定其在字符单元格列中的宽度。然后使用带有参数n 和"" 的%.*s 字段说明符在字段之前或之后添加适当数量的空格,其中n 是您要显示的空格数。
【讨论】: