2012-08-05 99 views
1

我试图用查找表和位掩码(this method)构建<ctype.h>的实现。但我看到的C11标准,我需要对当前区域的一些信息:如何实施<ctype.h>?

7.4字符处理<ctype.h>

[...]

2这些函数的行为是受当前语言环境影响。

那么,我需要一个<locale.h>执行?如何使用C标准库管理我的<ctype.h>实现?

+0

你想让它适用于所有地区吗?欧洲很容易使用多位掩码。 – stark 2012-08-05 12:56:35

+0

那么,我的项目是重新编码'',所以,如果它是可移植的(例如使用'locale.h'),它会更好。但这并非绝对必要。 – md5 2012-08-05 13:02:06

+0

查找表是常用的方法。但改变语言环境的方式会改变表格,这是实现的一部分。如果你在学校,你应该问清楚,如果地区依赖效应是作业的一部分或否。如果你在工作中,也需要澄清(实现区域设置可能比在没有它们的情况下实现ctype更多的工作量)。 – AProgrammer 2012-08-05 14:45:20

回答

1

对于8位字符,这样做的一种快速简单的方法是为LC_CTYPE的每个定义值设置一个位掩码。对于宽字符类型,可以通过某种方法(如2阶段查找)来减小表的大小。为了高效,这将需要针对每个字符编码进行设计。在LC_CTYPE上进行动态查找将允许更轻松地添加新的语言环境。

在我看来,你可以用16个左右的1字节表覆盖西方语言。做任何事情都需要大约50张桌子,其中一些非常繁琐。