字符串(计算机科学)
编辑在计算机编程中,字符串传统上是一个字符序列,可以作为一个字面常数或某种变量。后者可能允许其元素被突变,长度被改变,也可能是固定的(创建后)。字符串一般被认为是一种数据类型,通常被实现为一个字节(或字)的数组数据结构,它使用某种字符编码来存储元素序列,通常是字符。字符串也可以表示更一般的数组或其他序列(或列表)数据类型和结构。根据编程语言和所使用的精确数据类型,被声明为字符串的变量可能会导致内存中的存储被静态分配为预定的xxx长度,或者采用动态分配以允许它持有可变数量的元素。当一个字符串在源代码中出现时,它被称为一个字符串字面或匿名字符串。在数理逻辑和理论计算机科学中使用的形式语言中,字符串是一个有限的符号序列,这些符号是从一个称为字母表的集合中选择的。
字符串数据类型
编辑字符串数据类型是以形式化字符串的概念为模型的数据类型。字符串是如此重要和有用的数据类型,以至于它们几乎在每一种编程语言中都被实现。在一些语言中,它们可以作为原始类型,而在另一些语言中则作为复合类型。大多数高级编程语言的语法允许一个字符串,通常以某种方式加引号,来表示一个字符串数据类型的实例;这样的元字符串被称为字面或字符串字面。
字符串的长度
编辑虽然形式上的字符串可以有任意的有限长度,但现实语言中字符串的长度往往被限制在一个人为的xxx值。一般来说,有两种类型的字符串数据类型:固定长度的字符串,它有一个固定的xxx长度,在编译时确定,无论是否需要这个xxx长度,它都使用相同的内存;可变长度的字符串,它的长度不是任意固定的,它可以根据运行时的实际需求使用不同的内存(见内存管理)。现代编程语言中的大多数字符串都是可变长度的字符串。当然,即使是可变长度的字符串,其长度也是有限的--由可用的计算机内存的大小决定。字符串的长度可以作为一个单独的整数来存储(这可能会给长度带来另一个人为的限制),或者通过一个终止字符来隐含,通常是一个所有位为零的字符值,比如在C编程语言中。
字符编码
编辑字符串数据类型在历史上为每个字符分配一个字节,虽然具体的字符集因地区而异,但字符编码足够相似,程序员往往可以忽略这一点,因为程序特别对待的字符(如句号、空格和逗号)在程序会遇到的所有编码中都在同一个位置。这些字符集通常以ASCII或EBCDIC为基础。如果一个编码的文本在一个使用不同编码的系统上显示,文本往往会被搅乱,尽管往往有些可读性,一些计算机用户学会了阅读搅乱的文本。像中文、日文和韩文(统称为中日韩)这样的标识语言,需要远远超过256个字符(每个字符一个8位字节的编码极限)才能合理表达。通常的解决方案是为ASCII保留单字节表示法,为中日韩表意文字使用双字节表示法。在现有代码中使用这些方法会导致匹配和切割字符串的问题,其严重程度取决于字符编码的设计方式。一些编码,如EUC系列,保证ASCII范围内的字节值只代表该ASCII字符,使编码对使用这些字符作为字段分隔符的系统是安全的。
其他编码,如ISO-2022和Shift-JIS,并没有做出这样的保证,使得字节码的匹配不安全。这些编码也不是自我同步的,因此定位字符边界需要备份到字符串的开头,而将两个字符串粘贴在一起可能导致第二个字符串的损坏。Unicode在一定程度上简化了这种情况。大多数编程语言现在都有一个用于Unicode字符串的数据类型。Unicode的首选字节流格式UTF-8被设计为不会出现上述老式多字节编码的问题。UTF-8、UTF-16和UTF-32要求程序员知道固定大小的代码单位与字符不同,目前的主要困难是设计不正确的API,试图隐藏这种差异(UTF-32确实使代码点固定大小,但由于组成代码,这些不是字符)。
内容由匿名用户提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/164138/