博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Objective-C 如何让非等宽的数字和空格对齐
阅读量:5263 次
发布时间:2019-06-14

本文共 1760 字,大约阅读时间需要 5 分钟。

在printf中,我们可以通过格式字符串来对文字进行对齐输出,比如:

printf("%5d\n%5d", 12, 345);

在使用等宽字体的Console中,我们可以看到数字右对齐很完美,但是,上述方法一旦应用到用到了非等宽字体的环境里就没这么好看了。

 

如下所示,想要让这六个属性对齐输出:

 

因为数字的宽度和空格不一样,所以就会看到下面的文字向前有个缩进。

这里,我们用的格式是:

@"攻击: %-6d特攻: %-6d\n防御: %-6d特防: %-6d\n速度: %-6d生命: %-6d"

 

那么用制表符 \t 可不可以呢?答案是否定的。

因为制表符是把定位符补足到一定倍数的宽度,如果两个字符串的长度差超过了这个单位,就会差一个制表符的宽度了。

 

那么,我们手动控制制表符的插入可以么?

可以,但是如果字符串长度变化比较大,就要做多重判断。

_propertyLabel.text = [NSString stringWithFormat:@"攻击: %d\t%c特攻: %d\n防御: %d\t%c特防: %d\n速度: %d\t%c生命: %d",                           pet.property.attack,                           pet.property.attack > 99 ? 0 : '\t',                           pet.property.special_attack,                           pet.property.defence,                           pet.property.defence > 99 ? 0 : '\t',                           pet.property.special_defence,                           pet.property.speed,                           pet.property.speed > 99 ? 0 : '\t',                           pet.property.hp];

  

那么,还有没有别的办法呢?我们希望让上面的制表符的数量参数化,使得输出方法更通用。参考 printf 的文档,可以发现一种比较少见的宽度控制修饰符:*

这个修饰符的作用,是把%6d中的6参数化。通过实验可以发现空格的宽度大概是数字的1半宽度,因此我们只要补足空格的宽度就行了。经过测试,使用如下配置最佳:

_propertyLabel.text = [NSString stringWithFormat:@"攻击: %-*d特攻: %d\n防御: %-*d特防: %d\n速度: %-*d生命: %d",                           12 - (int)log10(pet.property.attack),                           pet.property.attack,                           pet.property.special_attack,                           12 - (int)log10(pet.property.defence),                           pet.property.defence,                           pet.property.special_defence,                           12 - (int)log10(pet.property.speed),                           pet.property.speed,                           pet.property.hp];

 

 

 

转载于:https://www.cnblogs.com/dabaopku/p/3419585.html

你可能感兴趣的文章
Struts框架----进度1
查看>>
Round B APAC Test 2017
查看>>
MySQL 字符编码问题详细解释
查看>>
Ubuntu下面安装eclipse for c++
查看>>
让IE浏览器支持CSS3圆角属性的方法
查看>>
巡风源码阅读与分析---nascan.py
查看>>
LiveBinding应用 dataBind 数据绑定
查看>>
Linux重定向: > 和 &> 区别
查看>>
nginx修改内核参数
查看>>
C 筛选法找素数
查看>>
TCP为什么需要3次握手与4次挥手(转载)
查看>>
IOC容器
查看>>
Windows 2003全面优化
查看>>
URAL 1002 Phone Numbers(KMP+最短路orDP)
查看>>
web_day4_css_宽度
查看>>
electron入门心得
查看>>
格而知之2:UIView的autoresizingMask属性探究
查看>>
我的Hook学习笔记
查看>>
js中的try/catch
查看>>
寄Android开发Gradle你需要知道的知识
查看>>