字符串
目录
什么是字符串
在计算机编程中,字符串传统上是一个字符序列,可以是字面常量,也可以是某种变量。后者可能允许其元素发生变异并改变长度,或者它可能是固定的(在创建之后)。字符串通常被认为是一种数据类型,通常被实现为字节(或单词)的数组数据结构,它使用某种字符编码存储一系列元素,通常是字符。字符串也可以表示更通用的数组或其他序列(或列表)数据类型和结构。
根据所使用的编程语言和精确的数据类型,声明为字符串的变量可能会导致内存中的存储被静态分配给预定的xxx长度,或者采用动态分配来允许它保存可变数量的元素。
当一个字符串在源代码中按字面意思出现时,它被称为字符串文字或匿名字符串。
在数学逻辑和理论计算机科学中使用的形式语言中,字符串是从称为字母表的集合中选择的有限符号序列。
字符串数据类型
字符串数据类型是根据正式字符串的概念建模的数据类型。字符串是如此重要和有用的数据类型,几乎所有编程语言都实现了它们。在某些语言中,它们可用作原始类型,而在其他语言中可用作复合类型。大多数高级编程语言的语法允许通常以某种方式引用的字符串来表示字符串数据类型的实例。这样的元字符串称为文字或字符串文字。
文字字符串
有时,字符串需要嵌入到文本文件中,该文件既可供人类阅读,又可供机器使用。这在例如编程语言的源代码或配置文件中是必需的。在这种情况下,NUL字符不能很好地用作终止符,因为它通常是不可见的(不可打印)并且难以通过键盘输入。存储字符串长度也很不方便,因为手动计算和跟踪长度既繁琐又容易出错。

两种常见的表示是:
- 用引号括起来(ASCII0x22双引号或ASCII0x27单引号),被大多数编程语言使用。为了能够包含特殊字符,例如引号本身、换行符或不可打印字符,通常可以使用转义序列,通常以反斜杠字符(ASCII0x5C)为前缀。
- 由换行符终止,例如在WindowsINI文件中。
非文本字符串
虽然字符串是字符串的常见用法,但计算机科学中的字符串通常指的是任何同质类型数据的序列。例如,位串或字节串可用于表示从通信介质检索的非文本二进制数据。根据应用程序的需要、程序员的愿望以及所使用的编程语言的能力,这些数据可能会或可能不会由特定于字符串的数据类型表示。如果编程语言的字符串实现不是8-bitclean,可能会导致数据损坏。
C程序员在“字符串”(也称为“字符串”)与“字节字符串”或“伪字符串”(可以存储在同一个数组中但通常不会以null终止。在这样的“字节字符串”上使用C字符串处理函数通常似乎可行,但后来会导致安全问题。
字符串处理算法
处理字符串的算法有很多种,每种算法都有不同的取舍。可以根据运行时间、存储要求等分析竞争算法。
一些类别的算法包括:
- 用于查找给定子字符串或模式的字符串搜索算法
- 字符串操作算法
- 排序算法
- 正则表达式算法
- 解析字符串
- 序列挖掘
高级字符串算法通常采用复杂的机制和数据结构,其中包括后缀树和有限状态机。