【问题标题】:Are the character digits ['0'..'9'] required to have contiguous numeric values?字符数字 ['0'..'9'] 是否需要具有连续的数值?
【发布时间】:2012-02-23 16:20:51
【问题描述】:

C++ 实现必须将字符 '0'-'9' 设置为具有连续的数值,即:

'0' -> 0+n
'1' -> 1+n
 m  -> m+n
'9' -> 9+n

isdigit([分类](22.3.3.1字符分类))的文档中找不到提到它*, 我也无法在语言环境文档中找到它(但也许我看的不够仔细)。

在 2.3 字符集中,我们发现

基本源字符集由 96 个字符组成:空格字符、控制字符表示 水平制表符、垂直制表符、换页和换行符,以及以下 91 个图形字符

但它没有提到任何排序(但也许我没有仔细看)。


*:有趣的脚注:

在循环中使用时,缓存ctype facet并直接使用[而不是isdigit()等,结束注释],或者使用ctype::is的向量形式会更快。

【问题讨论】:

  • 为什么要投票赞成:This question is not a good fit to our Q&A format. We expect answers to generally involve facts, references, or specific expertise; this question will likely solicit opinion, debate, arguments, polling, or extended discussion.我有事实、参考资料、具体的专业知识,答案可能不涉及征求意见、辩论、争论、投票,而是简单地参考标准,所以也没有扩展讨论?有没有高阶模组的人?
  • 它不在语言环境中,因为它也必须处理其他数字。 (例如 ;))

标签: c++ numbers ascii numerical digits


【解决方案1】:

确实看起来不够努力:在 2.3 中。字符集,第 3 项:

在源和执行基本字符集中,中每个字符在0之后的值 以上十进制数字列表大于前一个的值。

这是十进制数字列表的上方:

0 1 2 3 4 5 6 7 8 9

因此,实现必须使用十进制数字具有连续表示的字符集。因此,您依赖此属性的优化是安全的;但是,您依赖其他数字的连续性(例如'a'..'z')的优化是 not 可移植的 w.r.t。符合标准(另请参阅标题<cctype>)。如果您这样做,请确保声明该属性。

【讨论】:

  • 感谢@cHao 的提示。令人惊讶。
  • 碰巧的是,ASCII(及其派生词)和 EBCDIC 都将连续值分配给十进制数字。 ASCII 使小写字母和大写字母连续; EBCDIC 没有。这可能就是 C 和 C++ 需要连续数字而不是连续字母的原因。绝大多数 C++ 实现使用 ASCII 或其派生词之一(Latin-1、Windows-1252、Unicode 等);其余绝大多数使用 EBCDIC。
  • @CodingMastero:我通常会等几天来鼓励更多的答案。除了参考文献之外,也许有人提供了一些历史背景:)
  • 也是你问和回答的。那你还需要什么?
  • @CodingMastero:没错,但通常情况下,一些回答者会提供额外的信息和见解。我不想阻止任何人发帖。但是,时间缓冲结束了,我接受了。
猜你喜欢
  • 2021-12-31
  • 1970-01-01
  • 2016-08-19
  • 2010-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-25
  • 1970-01-01
相关资源
最近更新 更多