在ASCII CharacterSet
世界中,3个以外的空白字符都有一个数字。
Space(32) LineFeed(10) CarriageReturn(13)
因此,使用一些编程语言(如C)以便携方式编写程序以标准方式读取或写入此类空白字符,使用以下符号很容易,
LineFeed - '\n'
Carriage Return - '\r'
Space - ' '
我了解到TAB
是有时4个或有时8个Space
个字符的集合。
我的问题:
我如何理解编程语言中'\ t'字符的含义(如C)?如果CharacterSet
世界中没有标准的TAB定义?
答案 0 :(得分:2)
在ASCII中,水平制表符是代码9.无论编写代码的字符集是什么,ASCII水平制表符都是代码9。
在C中,'\t'
是源代码字符集中的水平制表符,与IO的字符集无关。 '\t'
的整数值可能是/可能不是9.
IO的代码和字符集的字符集(例如文件)通常是相同的。在2014年,通常都有ASCII(至少ASCII代码0 - 127)。
在C中,打印'\t'
有点精确;
将活动位置移动到下一个水平制表位置 在当前的路线上。如果活动位置处于或超过最后定义的水平位置 制表位置,未指定显示设备的行为。 C11§5.2.22
使用ASCII,Horizontal Tab不是为了表示可打印信息,而是为了控制设备。 ASCII原始定义导致控制设备的精确操作模糊不清:移动到下一个制表停止。
鉴于这些相似但不同的含义,并承认其他语言具有不同的含义,其确切含义在很大程度上取决于具体情况。因此,为了保持可移植性,需要其他依赖于情况的信息(例如,制表位的定义或列表)以精确地生成和解释水平制表符。
推荐:
除非数据格式需要(CSV,makefile),否则不要生成制表符,而是空格。在阅读'\t'
时,将其解释为能够与1个或多个连续空格相同。
答案 1 :(得分:0)
如何处理标签取决于
选项卡是指弹性分隔符,用于指示设备移动到下一个制表位。用N个空格替换标签只是穷人的处理。要正确呈现选项卡,您需要以某种方式找出适当的制表位。
当打印使用制表符作为字段分隔符的表格到文本终端时,您需要加载表格,计算每列中的字符数,并用空格填充每个字段,以便适合该列中最宽的字段。在这种情况下,选项卡的长度取决于您在下一列之前必须写入的字符数,而这又取决于当前行的内容。
答案 2 :(得分:0)
这只是其他答案的补充。制表位通常设置在4*n
或8*n
位置(此处我使用的是基于0的位置编号)。如果光标位于x
位置,则在输出制表符后,它会跳转到下一个制表位:
x = (x / 8 + 1) * 8;
或者,如果制表位的间距为s
(通常s
为4或8,如上所述):
x = (x / s + 1) * s;
但是,如果制表位完全灵活(例如,用户可以在Microsoft Word中指定每个制表位),则不存在此类公式。