是否按标准保证字符的顺序?例如,我可以计算字符集表中的“1”符号后面跟着“2”符号吗?还是特定于平台?
2 回答
1999 年的 C 标准对字符集进行了如下说明:
基本源字符集和基本执行字符集都应具有以下成员:
26 个拉丁字母大写字母
...
26 个拉丁字母小写字母
...
10 个十进制数字
0 1 2 3 4 5 6 7 8 9
后面的 29 个图形字符
...
在源和执行基本字符集中,上述十进制数字列表中 0 之后的每个字符的值应比前一个字符的值大 1。
标准要求数字字符是连续的,事实上,对于我所知道的“0”到“9”的所有平台,实际上都是有序的和连续的。对于一般的字母表,不能这样说。我向您指出任何EBCDIC平台(AS/400、OS390 等)的示例,但绝对不是这种情况。
即你可以可靠地做到这一点:
for (char ch = '0'; ch <= '9'; ch++)
但你不能可靠地这样做:
for (char ch = 'a'; ch <= 'z'; ch++)
并期望后者通过 26 次迭代。它将取决于平台。
注意:标准中没有规定保证数字之外的顺序(既是有序的又是连续的)。尽管如此,我工作过的所有平台(这是一个很大的数字)甚至对字母表都表现出一致的顺序属性,但只有类似的情况。即“a”总是“小于”“z”。但就像一分钱一样,然后又回到 EBCDIC 平台。对于标准平台,“A”始终小于“z”,但在 EBCDIC 中则不然。
底线:除了数字字符,你不能可靠地假设几乎任何关于顺序或顺序的东西,并且仍然保持纯粹的平台独立性。