我一直在研究 C++ 类以从流中提取任意大小的数字,并希望利用数字标点符号语言环境方面。不用说, std::num_get 不会提取我的任意大小的数字类;它只提取内置数字类型。但是提取器可以从语言环境的 numpunct 和 moneypunct 方面获取格式信息。
我遇到的最困难的方面是数字分组。我知道并非所有文化都将数字分组为三个,并且有些文化具有可变大小的数字组。
我遇到了一个博客(http://blogs.msdn.com/b/oldnewthing/archive/2006/04/17/577483.aspx),其中显示了一些示例。维基百科 ( http://en.wikipedia.org/wiki/Decimal_mark#Examples_of_use ) 也有一个示例表。
C 和 C++ 标准已经实现了一种在语言环境机制中处理此问题的方法。但是这些实现为一些非常复杂的情况留下了语义空间。当我们告诉识别器需要正确的数字分组时,识别一个看不到尽头的数字序列将非常复杂。
那么,我们可以通过做一些假设来降低复杂性吗?这些来自我在提供的示例中观察到的共性。
(假设1)只有最不重要的一组数字可以有不同的大小,并且不能小于其他组的大小。
如果假设 1 失败,我们可能会依赖:
(假设 2a)只有少数不同的尺寸。(希望是 2。我还没有看到任何超过两种不同尺寸的示例。)
(假设 2b)一个不太重要的数字组总是比所有其他组更长的重要数字。