"字符" 本身是个有趣的抽象概念。例如,在纸上或者屏幕上,字符 "C" 仅仅是一段曲线而已。在计算机中,用一个 8 Byte 存储该字符,并赋值 67;字符 "C" 还是拉丁字母的第三个字母;在化学专业,字符 "C" 是原子碳的缩写形式;在计算机学科中,字符 "C" 又被用来表示一种程序设计语言的名字。
目前,在计算机领域,字符集合是在字符与整数值之间的一种映射关系。
C++ 程序员通常假定能够使用美国字符集(ASCII),但 C++ 允许程序员缺少某些字符的可能性。如果在程序开发过程中,源代码含有 ASCII 里所没有的字符,这是比较麻烦的,许多语言(例如中文、丹麦文、法文、冰岛文、日文)无法用 ASCII 中的字符正常写出来,即使扩充到 16 位字符集,也无法将人类所知的所有字符放在同一字符集中。据说已经出现的 32 位字符集能保存每一个字符,但因字符数量庞大,不便于使用,尚未得到推广。
C++ 语言允许程序员使用任何字符集作为字符串的字符,也允许程序员使用扩充字符集或可移植的数值编码。从原则上讲,字符串能以任何(带有正确的复制操作)类型作为其字符类型。标准字符串类 string 要求其中的字符不能包含用户自定义复制操作,有助于字符串 I/O 的简化与高效率。
字符类型的性质是由字符特征类(char_traits)定义的。字符特征类是下述模板的特例:
template <class Ch> struct char_traits { }
所有字符特征类均定义在名称空间 std 中,标准的字符特征类由头文件 <String> 给出。通用字符串特征类 char_traits 本身不具有任何属性,只有针对特定字符类型的专门 char_traits 才具有属性。template <class Ch, class Tr = char_traits <Ch>, class A=allocator <Ch>> class std::basic_string { public: ... }在上述模板声明中,第一个参数(class Ch)是说明单个字符(Ch)所属型别(class)。
typedef basic_string <char> string;
typedef basic_string <wchar> wstring;
typedef Tr traits_type;
typedef typename Tr::char_type value_type
typedef A allocator_type
……
typedef basic_string <unsigned char> Ustring;
tyepdef basic_string <Jchar> Jstring; //日文字符串
本文链接:http://task.lmcjl.com/news/15889.html