第四章串 41串类型的定义 42串的表示和实现 1定长顺序存储表示 2堆分配存储表示 ●3串的块链存储表示 43串的模式匹配算法 44串操作应用举例 北京邮电大学自动化学院
北京邮电大学自动化学院 1 第四章 串 ⚫4.1 串类型的定义 ⚫4.2 串的表示和实现 ⚫ 1 定长顺序存储表示 ⚫ 2 堆分配存储表示 ⚫ 3 串的块链存储表示 ⚫4.3 串的模式匹配算法 ⚫4.4 串操作应用举例
4.1串类型的定义 、串和基本概念 1、串( String) ●串是零个或多个字符组成的有限序列。一般记作 S='a1a2a3an’,其中S是串名,单引号括起来的字符序列 是串值;a(1i≤n)可以是字母、数字或其它字符;串中所包 含的字符个数称为该串的长度。 长度为零的串称为空串 NULL String),它不包含任何字符 通常将仅由一个或多个空格组成的串称为空白串(B|ank String) 注意:空串和空白串的不同,例如,和‘分别表示长度 为1的空白串和长度为0的空串。 北京邮电大学自动化学院
北京邮电大学自动化学院 2 ⚫ 一、串和基本概念 4.1 串类型的定义 ⚫ 1、串(String) ⚫ 串是零个或多个字符组成的有限序列。一般记作 S= ’a1a2a3…an ’,其中S 是串名,单引号括起来的字符序列 是串值;ai (1≦i≦n)可以是字母、数字或其它字符;串中所包 含的字符个数称为该串的长度。 ⚫ 长度为零的串称为空串(NULL String),它不包含任何字符。 ⚫ 注意:空串和空白串的不同,例如‘ ’和‘’分别表示长度 为1的空白串和长度为0的空串。 ⚫ 通常将仅由一个或多个空格组成的串称为空白串(Blank String)
串和基本概念 串中任意个连续字符组成的子序列称为该串的子串,包含子串 的串相应地称为主串。 ●通常将子串在主串中首次出现时的该子串的首字符对应的主 串中的序号,定义为子串在主串中的序号(或位置)。 例如,设a、b、c、d为如下的四个串: ●a=BEP,b=fJNG’,c= BEJJING’,d=‘BE|JNG ●则它们的长度分别为3、4、7、8;并且a和b都是c和d的子 串,a在c和d中的位置都是1,而b在c的位置是4,在d中的 位置则是5 特别地,空串是任意串的子串,任意串是其自身的子串。 北京邮电大学自动化学院
北京邮电大学自动化学院 3 ⚫ 串中任意个连续字符组成的子序列称为该串的子串,包含子串 的串相应地称为主串。 一、串和基本概念 ⚫ 通常将子串在主串中首次出现时的该子串的首字符对应的主 串中的序号,定义为子串在主串中的序号(或位置)。 ⚫ 例如,设a、b、c、d为如下的四个串: ⚫ a=‘BEI’ , b=‘JING’, c=‘BEIJING’, d=‘BEI JING’ ⚫ 则它们的长度分别为3、4、7、8;并且a和b都是c和d的子 串,a在c和d中的位置都是1,而b在 c的位置是4,在d中的 位置则是5。 ⚫ 特别地,空串是任意串的子串,任意串是其自身的子串
串和基本概念 ●当且仅当两个串的值相等,称两个串是相等。也就是说,只 有两个串的长度相等,并且各对应位置的字符都相等时才相 等。例如上例中的串a、b、c和d彼此都不是相等。 串值必须用一对单引号扩起来但单引号本身不属于串,它的 作用只是为了避免于变量名或数的常量混淆而已 ●通常在程序中使用的串可分为两种:串变量和串常量。串常 量和整常数、实常数一样,在程序中只能被引用但不能不能 改变其值,即只能读不能写 ●通常串常量是由直接量来表示的,例如语句 Eror(“ overflow)中“ overflow"是直接量。但有的语言允 许对串常量命名,以使程序易读、易写。如C++中,可定义 ● const char path=“dir/bin/appl”; 北京邮电大学自动化学院
北京邮电大学自动化学院 4 ⚫ 当且仅当两个串的值相等,称两个串是相等。也就是说,只 有两个串的长度相等,并且各对应位置的字符都相等时才相 等。例如上例中的串a、b、c和d彼此都不是相等。 一、串和基本概念 ⚫ 串值必须用一对单引号扩起来但单引号本身不属于串,它的 作用只是为了避免于变量名或数的常量混淆而已。 ⚫ 通常在程序中使用的串可分为两种:串变量和串常量。串常 量和整常数、实常数一样,在程序中只能被引用但不能不能 改变其值,即只能读不能写。 ⚫ 通常串常量是由直接量来表示的,例如语句 Error(“overflow”)中“overflow”是直接量。但有的语言允 许对串常量命名,以使程序易读、易写。如C++中,可定义 ⚫ const char path[]=“dir/bin/appl”;
串和基本概念 o const char path="dir/bin/appl 这里path是一个串常量,对它只能读不能写。串变量和其它 类型的变量一样,其取值是可以改变的。 串的逻辑结构和线性表极为相似,区别仅在于串的数据对象 约束为字符集。然而,串的基本操作和线性表有很大差别。 在线性表中的基本操作中,大多数以“单个元素”作为操作 对象。例如在线性表中査找某个元素、求取某个元素、在某 个位置上插入一个元素和删除一个元素等; 而在串的基本操作中,通常以“串的整体”作为操作对象, 例如在串中查找某个子串、求取一个子串、在串的某个位置 上插入一个子串以及删除一个子串等。 北京邮电大学自动化学院
北京邮电大学自动化学院 5 ⚫ const char path[]=“dir/bin/appl”; ⚫ 这里path是一个串常量,对它只能读不能写。串变量和其它 类型的变量一样,其取值是可以改变的。 一、串和基本概念 ⚫ 串的逻辑结构和线性表极为相似,区别仅在于串的数据对象 约束为字符集。然而,串的基本操作和线性表有很大差别。 ⚫ 在线性表中的基本操作中,大多数以“单个元素”作为操作 对象。例如在线性表中查找某个元素、求取某个元素、在某 个位置上插入一个元素和删除一个元素等; ⚫ 而在串的基本操作中,通常以“串的整体”作为操作对象, 例如在串中查找某个子串、求取一个子串、在串的某个位置 上插入一个子串以及删除一个子串等