在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中的参数化。通过实验可以发现空格的宽度大概是数字的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];

Objective-C 如何让非等宽的数字和空格对齐的更多相关文章

  1. js 图片压缩上传(纯js的质量压缩,非长宽压缩)

    下面是大神整理的demo,很实用,这里存一下备用,感谢大神! 此demo为大于1M对图片进行压缩上传 若小于1M则原图上传,可以根据自己实际需求更改. demo源码如下 <!DOCTYPE ht ...

  2. 前端图片压缩上传(纯js的质量压缩,非长宽压缩)

    此demo为大于1M对图片进行压缩上传 若小于1M则原图上传,可以根据自己实际需求更改. demo源码如下: <!DOCTYPE html> <html> <head&g ...

  3. 关于js计算非等宽字体宽度的方法

    准备一个容器 首先在body外插入一个absolute的容器避免重绘: const svgWidthTestContainer = document.createElement('svg'); svg ...

  4. 【微信小程序】图片压缩-纯质量压缩,非长宽裁剪压缩

      原理:利用canvas来实现,将图片绘制到canvas上,然后canvas转图片时,微信提供的一个方法wx.canvasToTempFilePath(Object object, Object t ...

  5. sourceinsight tab 空格 对齐 等宽字体

    参考:http://bbs.chinaunix.net/thread-587409-1-1.html 1. SMART TAB的用法. 解决自动缩进. 新开一个PROJECT后,点Options-&g ...

  6. ARTS-S python把非汉语和非字母的字符替换成空格

    # coding: utf-8 import re text = "aa[bb,aa#cWc中a国" FILTER_PUNTS = re.compile("[^\u4E0 ...

  7. HNUSTOJ-1690 千纸鹤

    1690: 千纸鹤 时间限制: 1 Sec  内存限制: 128 MB提交: 992  解决: 296[提交][状态][讨论版] 题目描述  圣诞节快到了,校园里到处弥漫着粉红色的气息.又是一个情侣秀 ...

  8. eclipse 中使用等宽字体 inconsolata

    一直以来,就感觉使用 eclipse 时的那几种字体很难看,而且非等宽,空格宽度很小,排版很乱. 搜索并试用了一下,发现了字体inconsolata. 这是一个很适合编程的字体,效果如下: 非常漂亮. ...

  9. vs2010等宽字体设置

    VS2010自带的字体非等宽,不同行的代码采用同样的缩进空格时,可能左侧未对齐. 这个里有一款字体很帮,字体名字叫Fixedsys Excelsior 3.01,下载地址:http://www.fix ...

随机推荐

  1. iOS开发技巧 - 使用UIDatePicker来选择日期和时间

    (Swift) import UIKit class ViewController: UIViewController { var datePicker: UIDatePicker! func dat ...

  2. 从#!/bin/bash中想到的...

    罪过罪过,开发了N年的SHELL,竟然第一次思考#!/bin/bash是啥意思?真是怀疑以前的的代码是咋开发出来的- 如果要解释#!/bin/bash是啥意思?为啥每个SHELL脚本第一行都写它哪?首 ...

  3. 用 bottle.py 写了个简单的升级包上传

    可以当作一个 demo 来玩吧,在这里分享一下.里面涉及的内容包含了文件上传,cookie 设置和读取,重定向(redirect). from bottle import run, post, get ...

  4. JDBC编程之事务的使用教程

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5868750.html  关于事务的理论知识.ACID特性等等,网上太多了,在此不一一重复.本文主要着重  事务 ...

  5. Linux上实现Windows的SQLPlus保存SQL历史记录功能

    在Windows操作系统上,当在DOS命令窗口中运行SQL*Plus的时候,可以使用向上,向下键来跳回之前已经执行过的SQL语句.你可以根据需要修改他们,然后按Enter键重新提交执行. 然而,当在L ...

  6. log4j的详细配置(最省心完美配置)

    先说下我的需求 1,可以记录日记在我们的java开发项目周期中: 2,很简单即可输出日志: 3,每天按照时间将不同的日志输出到不同的文件中,每天输出日志到一个带有当前时间戳的文件中: 4,可以修改当前 ...

  7. 查询后n条记录

    查询后n条记录 SELECT * FROM tb_stu ORDER BY id ASC LIMIT n

  8. win7 远程桌面连接centos 6.5

    首先安装tigervnc-server: yum install tigervnc-server 安装好后,设置 vi /etc/sysconfig/vncservers 'man vncpasswd ...

  9. 文本diff算法Patience Diff

    一般在使用 Myers diff算法及其变体时, 对于下面这种例子工作不是很好, 让变化不易阅读, 并且容易导致合并冲突 void Chunk_copy(Chunk *src, size_t src_ ...

  10. JavaScript判断是否全为中文,是否含有中文

    来源于:http://blog.csdn.net/yenange/article/details/7463897 第一种代码(全为中文则返回"true",不全为中文则返回" ...