05第五章串
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5.3 串的存储结构
串作为线性表的一个特例,用于线性表的存储结构也适用于串。但是, 由于串中数据元素全部为字符,故存储表示有其特殊之处。
对串的存储可以有两种处理方式:一种是将串定义成字符型数组,串的
存储空间分配在编译时完成,不能更改,这种方式称为串的静态存储结
构;另一种是串的存储空间在程序运行时动态分配,这种方式称为串的
/*串的顺序存储结构表示*/
const int maxsize=maxlen; //maxlen表示串的最大容量
struct segstring
{
char ch[maxsize]; //存放串的值的一维数组
int len;
//当前串的实际长度
};
5.3.1 串的顺序存储结构
串的实际长度可在定义的最大长度范围内随意,超过最大长度的串值则 被舍去,称之为截断。当计算机按字节(byte)为单位编址时,一个机 器字(存储单元)刚好存放一个字符,串中相邻的字符顺序的存储在地 址相邻的字节中;当计算机按字(word)为单位编址时,一个存储单元 由若干字节组成。这时,顺序存储结构有紧凑格式和非紧凑格式两种存 储方式。 1. 紧凑格式 所谓紧凑格式就是在存储单元中尽量的多存储字符。例如,S=“Love China”,按紧凑格式可以存放在三个存储单元中(假设计算机的字长为 32位,即4bytes),如图5-1所示。
在早期的程序设计语言中,就引入了串的概念。随着计算机技术的发 展,计算机越来越多地用于解决非数值处理问题,这些问题所涉及的 主要操作对象是字符串(简称串)。例如在管理信息系统中,用户的 姓名、地址、商品的名称、规格等都是字符串,字符串已成为数据处 理中不可缺少的数据对象。目前,大多数程序设计语言都支持串操作, 可以执行各种运算,并提供相应的串函数。然而,在不同的应用中, 处理的字符串有不同的特点,为了有效的对字符串进行处理,就要了 解串的内部表示和处理过程,从而根据具体情况使用合适的存储结构。 信息检索系统、中文信息处理系统、学习系统、自然语言翻译系统以 及音乐分析处理系统等等都是基于串的基本运算来设计和开发的软件 系统。
下动边态将存分三储节结来构讲。述串串的的静存态储存结构储:结构即串的顺序存储结构,串的动态存储
结构有两种方式:一种是链式存储结构,另一种是称为堆结构的存储方
式。
5.3.1 串的顺序存储结构
5.3.2 串的链式存储结构
5.3.3 串的索引存储结构
5.3.1 串的顺序存储结构
和线性表的顺序存储结构一样,可以用一组连续的存储单元依次存储串 中的各个字符。逻辑上相邻的字符,物理上也是相邻的。在C++语言中, 字符串的顺序存储可用一个字符型数组和一个整型变量表示,其中字符 型数组存储串值,整型变量存储串的长度。下面给出串的顺序存储结构 表示。
串也可以比较大小。 【串变量】下面这个语句S=“12345”是一个合法的赋值语句,其
含义是把串值赋给串变量,S是串变量名,字符序列12345是串值。 而另一个语句S=12345的含义是把12345赋给变量S。它们的区 别在于,前者的S为串变量,其取值为字符序列12345;后者的S 为算术变量,其取值为12345。
5.2 串的基本概念
【子串】字符串中任意个连续的字符构成的子序列称为该字符串的 子串。空串是任何串的子串。
【主串】包含子串的字符串称为主串。 【位置】一个字符在序列中的序号称为该字符在串中的位置。子串
在主串中的位置则以子串的第一个字符在主串中的位置来表示。 【两串相等】两个字符串的长度相等且各对应位置上的字符都相同。
第五章串
5.1 C++语言的字符和字符串 5.2 串的基本概念 5.3 串的存储结构 5.4 串的操作 5.5 串的基本运算与实现 5.6 模式匹配 5.7 串在文本编辑中的应用
概述
串是字符串的简称,它的每个数据元素由一个字符组成。串是一种特 殊的线性表。字符和字符串是除了数值以外在程序中使用最多的数据 对象。每个应用程序或多或少地使用和处理文本形式的信息。它们或 者需要从用户那里得到字符序列输入,或者需要把字符序列形式的信 息显示给用户。C++语言没有把字符串定义为基本数据类型,而是 直接采用C语言的以指针和字符数组方式形成的字符串。
5.1 C++语言的字符和字符串
如果在程序中要建立一个存放字符串的缓冲 区,那么就应该定义一个字符数组。定义字 符数组可以同时用一个字面字符串赋初始值。 这样做的时候必须注意,此字符串的大小决 不能超过数组定义的范围,否则越界就可造 成不可预料的破坏。
5.2 串的基本概念
【串(String)】是由零个或多个字符组成的有限连续序列。简 单地说,串就是一串字符。一般记为
5.1 C++语言的字符和字符串
数组(Array)是由一组类型相同的数据元素构成的有限序列,且该有 限序列存储在一块地址连续的内存单元中。数据元素可以是整数、实数
等简单类型,也可C++(与C语言一样)把字符简单地作为一 种整数类型,一个字符被看作一个整数,所有对整数可用的 操作都可以用于字符,包括加减乘除运算。C++语言中没有 预定义的字符串类型,字符串被处理为由字符指针指向的、 存储在字符数组里的字符序列。所有表示字符串的字符序列 最后都加上了一个空字符‘\0’,作为字符串的结束标志。程 序里直接写出的字符串字面量(有双引号括起来的字符序列) 被编译程序自动转换成具有这种形式的(匿名的,没有名字 的)数组,这种数组的开始地址被作为字符指针值使用。
S= “s1s2…s n” 其中,S是串的名字,双引号括起来的字符序列s1s2…sn是串的值,
字符个数n称作串的长度,每个si(1≤i≤n)的取值范围可以是 ASCII码字符中的可打印字符,通常是字母、数字等字符。i称为字 符ai在串中的位置,n称为串的长度。双引号本身不是串的值,它 是定界符,用于标志字符串的起始位置和终止位置。 【空串(null string)】是由零个字符组成的串。空串中不包含 任何字符,它的长度是0,记为S=“”。 【空格串】是由一个或多个空格组成的串。它不等于空串,它的长 度是串中包含的空格数。字符串中空格也算在串长度中。为了清楚 起见,有时用“□”表示实际的空格。