1
算法与数据结构  C语言版
1.6.1.1 4.1.1 串的基本概念
4.1.1 串的基本概念

1.串的定义

串是由n(n≥0)个字符组成的有限序列。一般表示为

其中,s为串名;n为串的长度;“"”为字符串的定界符;由定界符引起来的字符序列为串值;ai(0≤i≤n-1)为串中的字符,可以是字母、数字及其他ASCII字符。

2.串的术语

长度为零的串称为空串,表示串中不包含任何字符。通常用“Φ”表示。

由一个或多个空格组成的串称为空格串。空格串依然有长度,因此它不是空串。

由串中任意连续字符组成的子序列称为子串,而包含子串的串称为该子串的主串。空串是任意串的子串。

单个字符在字符串中的序号(大于或等于0的整数)称为该字符在串中的位置,而子串的第一个字符在主串中的位置称为子串的位置。

若两个串的长度相等且对应位置上的字符也相等,则称两个串相等。

例如,以下4个字符串:

其中,S1是空串,S2是空格串,S4是S3的一个子串,S4在S3中的位置是6,S3与S4串不相等。另外,要注意的是,26个字母的字符有大写和小写之分,大写字母字符和小写字母字符是不同的字符,因此上述S3和S5不相等。

在C语言中,表示一个串值时用一对双引号把串值括起来,但双引号本身不属于串,双引号的作用只是为了避免与其他符号混淆。

虽然串是由字符组成的,但串和字符是两个不同的概念。串是长度不确定的字符序列,而字符只是一个字符。因此即使是长度为1的串也和字符不同。例如,串"a"和'a'(字符通常用单引号括起来)就是两个不同的概念。因为串"a"不仅要存储字符'a',还要存储该串的长度数据;而字符'a'只需存储字符'a',不需要存储长度数据。

3.串的逻辑结构

串的逻辑结构和线性表相同,正如本章开始所讲,串其实就是一种特殊的线性表,但串和一般的线性表不同的地方具体体现在:

·线性表的数据元素类型可以是任意数据类型,而串的数据元素只能是字符类型;

·线性表一次操作一个数据元素,而串一次操作多个数据元素,即以子串为操作单位。

因此,以上正是串的逻辑结构的特点。