Objective-C 如何让非等宽的数字和空格对齐
2013-11-12 15:15
295 查看
在printf中,我们可以通过格式字符串来对文字进行对齐输出,比如:
在使用等宽字体的Console中,我们可以看到数字右对齐很完美,但是,上述方法一旦应用到用到了非等宽字体的环境里就没这么好看了。
如下所示,想要让这六个属性对齐输出:
因为数字的宽度和空格不一样,所以就会看到下面的文字向前有个缩进。
这里,我们用的格式是:
那么用制表符 \t 可不可以呢?答案是否定的。
因为制表符是把定位符补足到一定倍数的宽度,如果两个字符串的长度差超过了这个单位,就会差一个制表符的宽度了。
那么,我们手动控制制表符的插入可以么?
可以,但是如果字符串长度变化比较大,就要做多重判断。
那么,还有没有别的办法呢?我们希望让上面的制表符的数量参数化,使得输出方法更通用。参考 printf 的文档,可以发现一种比较少见的宽度控制修饰符:*
这个修饰符的作用,是把%6d中的6参数化。通过实验可以发现空格的宽度大概是数字的1半宽度,因此我们只要补足空格的宽度就行了。经过测试,使用如下配置最佳:
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];
相关文章推荐
- 黑马程序员---如何处理将字符串里的数字提取出来和将字符串里的空格去掉?
- 从屏幕输入一行数字,以空格分隔,如何分别存放到数组中
- ACM如何输入以空格为间隔,换行符为结束的一行数字
- 如何连续读取多个以空格分开的数字?遇见回车结束?
- 如何设置vim用空格代替tab,自动对齐等
- 从屏幕输入一行数字,以空格分隔,如何分别存放到数组中
- Objective-C如何将阿拉伯数字转汉字
- python3如何使用空格输入多个数字&如何使用input输入二维数组
- 从屏幕输入一行数字,以空格分隔,如何分别存放到数组中
- 如何用java语言编写“求一个字符串中的的字母,数字,空格的数目。”
- 统计字符串中英文字母、汉字、空格、数字及其他字符出现的字数
- iOS关于如何去除空格和回车以及字典转json
- 如何过滤让输入框 只输入字母和数字
- 如何在Win上安装和使用GNUstep和Objective-C
- java中如何输入数字串,过滤掉逗号,把他们放入数组
- 如何教计算机认识手写数字(下)
- 输入一行字符,分别统计出包含英文字母、空格、数字和其它字符的个数
- Objective-C 的基本数据类型、数字、字符串和集合等介绍
- Objective-C如何使用对象集合学习系列二
- js中如何输出空格