版权归原作者所有,如有侵权,请联系我们

[科普中国]-字符数据类型操作

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

简介

在编程语言中,char类型原本用于表示当个字符。如今,有些Unicode字符可以用一个char描述,另外一些Unicode字符则需要两个char值2。主要原因语言不只有英语一种,还有很多其他语言,如中文,德语。为了全世界每个不同语言的不同字符都统一编码,全球通行,字符采用了Unicode编码。字符数据类型操作是指对计算机中的字符数据进行有关操作。这里字符不只是一个char,主要与处理的语言有关。字符数据类型操作一些常见操作在编程语言的库函数都存在。

有关术语数据类型数据类型在数据结构中的定义是一个值的集合以及定义在这个值集上的一组操作。

变量是用来存储值的所在处,它们有名字和数据类型。变量的数据类型决定了如何将代表这些值的位存储到计算机的内存中。在声明变量时也可指定它的数据类型。所有变量都具有数据类型,以决定能够存储哪种数据。

数据类型包括原始类型、多元组、记录单元、代数数据类型、抽象数据类型、参考类型以及函数类型。

UnicodeUnicode(中文:万国码、国际码、统一码、单一码)是计算机科学领域里的一项业界标准。它对世界上大部分的文字系统进行了整理、编码,使得电脑可以用更为简单的方式来呈现和处理文字。

Unicode伴随着通用字符集的标准而发展,同时也以书本的形式对外发表[3]。Unicode至今仍在不断增修,每个新版本都加入更多新的字符。目前最新的版本为2016年6月21日公布的9.0.0[4],已经收入超过十万个字符(第十万个字符在2005年获采纳)。Unicode涵盖的数据除了视觉上的字形、编码方法、标准的字符编码外,还包含了字符特性,如大小写字母。

Unicode发展由非营利机构统一码联盟负责,该机构致力于让Unicode方案取代既有的字符编码方案。因为既有的方案往往空间非常有限,亦不适用于多语环境。

Unicode备受认可,并广泛地应用于电脑软件的国际化与本地化过程。有很多新科技,如可扩展置标语言(Extensible Markup Language,简称:XML)、Java编程语言以及现代的操作系统,都采用Unicode编码。

统一码的编码方式与ISO 10646的通用字符集概念相对应。目前实际应用的统一码版本对应于UCS-2,使用16位的编码空间。也就是每个字符占用2个字节。这样理论上一共最多可以表示216(即65536)个字符。基本满足各种语言的使用。实际上当前版本的统一码并未完全使用这16位编码,而是保留了大量空间以作为特殊使用或将来扩展。

上述16位统一码字符构成基本多文种平面。最新(但未实际广泛使用)的统一码版本定义了16个辅助平面,两者合起来至少需要占据21位的编码空间,比3字节略少。但事实上辅助平面字符仍然占用4字节编码空间,与UCS-4保持一致。未来版本会扩充到ISO 10646-1实现级别3,即涵盖UCS-4的所有字符。UCS-4是一个更大的尚未填充完全的31位字符集,加上恒为0的首位,共需占据32位,即4字节。理论上最多能表示231个字符,完全可以涵盖一切语言所用的符号。

基本多文种平面的字符的编码为U+hhhh,其中每个h代表一个十六进制数字,与UCS-2编码完全相同。而其对应的4字节UCS-4编码后两个字节一致,前两个字节则所有位均为0。

C语言中常见字符操作函数strcpy原型:extern char *strcpy(char *dest,char *src);

用法:#include

功能:把src所指由NUL结束的字符串复制到dest所指的数组中。

返回指向dest结尾处字符(NUL)的指针。

strcat原型:extern char *strcat(char *dest,char *src);

用法:#include

功能:把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。

返回指向dest的指针。

strlen原型:extern int strlen(char *s);

用法:#include

功能:计算字符串s的长度

说明:返回s的长度,不包括结束符NULL。

strncat原型:extern char *strncat(char *dest,char *src,int n);

用法:#include

功能:把src所指字符串的前n个字符添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。

返回指向dest的指针。

strncpy原型:extern char *strncpy(char *dest, char *src, int n);

用法:#include

功能:把src所指由NULL结束的字符串的前n个字节复制到dest所指的数组中。

stricmp功 能: 以大小写不敏感方式比较两个串

用 法: int stricmp(char *str1, char *str2);

strerror功 能: 返回指向错误信息字符串的指针

用 法: char *strerror(int errnum);

strcmp功 能: 将一个串与另一个比较

用 法: intstrcmpi(char *str1, char *str2);

strncmp功 能: 把串中的一部分与另一串中的一部分比较 (前n个字符)

用 法: int strncmp(char *str1, char *str2,int maxlen);

strnicmp功 能: 不注重大小写地比较两个串的前n个字符

用 法: intstrnicmp(char *str1, char *str2, unsigned maxlen);

strpbrk功 能: 在串中查找给定字符集中的字符

用 法: char *strpbrk(char *str1, char *str2);

strrchr功 能: 在串中查找指定字符的最后一个出现

用 法: char *strrchr(char *str, char c);

strrev功 能: 串倒转

用 法: char *strrev(char *str);

strset功 能: 将一个串中的所有字符都设为指定字符

用 法: char *strset(char *str, char c);

strspn功 能: 返回字符串中第一个不在指定字符串中出现的字符下标

用 法: int strspn(char *str1, char *str2);

strstr功 能: 在串中查找指定字符串的第一次出现

用 法: char *strstr(char *str1, char *str2);

strtod功 能: 将字符串转换为double型值

用 法: double strtod(char *str, char **endptr);

strtok功 能: 查找由在第二个串中指定的分界符分隔开的单词

用 法: char *strtok(char *str1, char *str2);

strupr功 能: 将串中的小写字母转换为大写字母

用 法: char *strupr(char *str);

swab功 能: 交换字节

用 法: void swab (char *from, char *to, int nbytes);

isalpha原型:extern int isalpha(int c);

用法:#include

功能:判断字符c是否为英文字母

说明:当c为英文字母a-z或A-Z时,返回非零值,否则返回零。