串的定义及基本运算
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2018年11月26 日
3
第四章 串
2.子串的位置:子串的第一个字符在主串中的序号称 为子串的位置。 B在A中出现了两次,首次出现所对 应的主串位置是3。因此,称B在A中的序号(或位置) 为3。 特别地,空串是任意串的子串,任意串是其自身的 子串。 3.串相等:称两个串是相等的,是指两个串的长度 相等且对应字符都相等。
2018年11月26 日
10
第四章 串
4.2.2
定长顺序串的基本运算
1.串联接:把两个串s1和s2首尾连接成一个新串s 。 int StrConcat1(s1,s2,s) { int i=0 , j, len1, len2; len1= StrLength(s1); len2= StrLength(s2) if (len1+ len2>MAXSIZE-1) return 0 ; j=0; while(s1[j]!=’\0’) { s[i]=s1[j];i++; j++; } j=0; while(s2[j]!=’\0’) { s[i]=s2[j];i++; j++; } s[i]=’\0’; return 1; }
8.串删除 StrDelete(s,i,len) 操作条件:串s存在,1≤i≤StrLength(s), 0≤len≤StrLength(s)-i+1。 操作结果:删除串s 中从第i个字符开始的长度为 len的子串,s的串值改变。
9.串替换 StrRep(s,t,r) 操作条件:串s,t,r存在,t不为空。 操作结果:用串r 替换串s中出现的所有与串t相等 的不重叠的子串,s的串值改变。 2018年11月26
2018年11月26 日
9
第四章 串
s.dataБайду номын сангаас
0 S
1 t
2 u
3 d
4 e
5 n
s.curlen … MAXSIZE-1
2.在串尾存储一个不会在串中出现的特殊字符作为串的 终结符,以此表示串的结尾。比如C语言中处理定长串 的方法就是这样的,它是用'\0'来表示串的结束。 3. 设定长串存储空间:char s[MAXSIZE+1]; 用s[0] 存放串的实际长度,串值存放在s[1]~s[MAXSIZE],字 符的序号和存储位置一致,应用更为方便。
第四章 串
4.1 串的定义及基本运算
4.2 串的存储结构
4.3 模式匹配算法的实现 4.4 小结与习题
2018年11月26 日
1
第四章 串
串(字符串)是一种特殊的线性表,它的数据元 素仅由一个字符组成,计算机非数值处理的对象经常 是字符串数据,在事物处理程序中,一般也是作为字 符串处理的。 4.1 串的定义及基本运算
6.子串定位 StrIndex(s,t):找子串t在主串s中首 次出现的位置 操作条件:串 s,t存在。操作结果:若t∈s,则操作 返回t在s中首次出现的位置,否则返回值为-1。
2018年11月26 日
7
第四章 串
7.插入 StrInsert(s,i,t) 操作条件:串s,t存在,1≤i≤StrLength(s)+1。 操作结果:将串t插入到串s 的第i个字符位置上。
一、串和基本概念 串(String)是零个或多个字符组成的有限序列。 一般记作:S=“a1a2a3…an” 其中S是串名,双引号括起来的字符序列是串值; ai(1≦i≦n)可以是字母、数字或其它字符;串中所包 含的字符个数称为该串的长度。长度为零的串称为空 串(Empty String),它不包含任何字符。 2018年11月26
2018年11月26 日
11
第四章 串
2. 求子串 int StrSub (char *t, char *s, int i, int len) { int slen; slen=StrLength(s); if ( i<1 || i>slen || len<0 || len>slen-i+1) { printf("参数不对"); return 0; } for (j=0; j<len; j++) t[j]=s[i+j-1]; t[j]=’\0’; d e n t.data 例2. s.curlen return 1;}
2018年11月26 日
5
第四章 串
3.连接操作 :StrConcat (s1,s2,s) 或StrConcat (s1,s2)
操作条件:串s1,s2存在。
操作结果:两个串的联接就是将一个串的串值紧接 着放在另一个串的后面,连接成一个串。前者是产生 新串s,s1和s2不改变; 后者是在 s1的后面联接 s2的串 值,s1改变, s2不改变。
4.求子串SubStr (s,i,len): 操作条件:串s存在,1≤i≤StrLength(s), 0≤len≤StrLength(s)-i+1。 操作结果:返回从串s的第i个字符开始的长度为 len 的子串。len=0得到的是空串。
2018年11月26 日
6
第四章 串
5.串比较 StrCmp(s1,s2) 操作条件:串s1,s2存在。操作结果:若s1= =s2,操 作返回值为0;若s1<s2, 返回值<0;若s1>s2, 返回 值>0。
2018年11月26 日
4
第四章 串
三、串的基本运算 1.求串长StrLength(s): 操作条件:串s存在;操作结果:求出串s的长度。 2.串赋值StrAssign(s1,s2) 操作条件: s1是一个串变量,s2或者是一个串常量, 或者是一个串变量(通常s2 是一个串常量时称为串赋 值,是一个串变量称为串拷贝)。 操作结果:将s2的串值赋值给s1, s1原来的值被覆 盖掉。
日 8
第四章 串
4.2 串的存储结构
4.2.1 串的定长顺序存储 类似于顺序表,用一组地址连续的存储单元存储串值 中的字符序列,所谓定长是指按预定义的大小,为每 一个串变量分配一个固定长度的存储区,如:
1. 类似顺序表,用一个指针来指向最后一个字 符,这样表示的串描述如下: typedef struct { char data[MAXSIZE]; int curlen; } SeqString;
日 2
第四章 串
通常将仅由一个或多个空格组成的串称为空白串 (Blank String) 。
注意:空串和空白串的不同。 二、串的术语 1.主串和子串:串中任意个连续字符组成的子序列称 为该串的子串,包含子串的串相应地称为主串。通常 将子串在主串中首次出现时的该子串的首字符对应的 主串中的序号,定义为子串在主串中的序号(或位 置)。例如,设A和B分别为 A=“This is a string” B=“is” 则B是A的子串,A为主串。
3
第四章 串
2.子串的位置:子串的第一个字符在主串中的序号称 为子串的位置。 B在A中出现了两次,首次出现所对 应的主串位置是3。因此,称B在A中的序号(或位置) 为3。 特别地,空串是任意串的子串,任意串是其自身的 子串。 3.串相等:称两个串是相等的,是指两个串的长度 相等且对应字符都相等。
2018年11月26 日
10
第四章 串
4.2.2
定长顺序串的基本运算
1.串联接:把两个串s1和s2首尾连接成一个新串s 。 int StrConcat1(s1,s2,s) { int i=0 , j, len1, len2; len1= StrLength(s1); len2= StrLength(s2) if (len1+ len2>MAXSIZE-1) return 0 ; j=0; while(s1[j]!=’\0’) { s[i]=s1[j];i++; j++; } j=0; while(s2[j]!=’\0’) { s[i]=s2[j];i++; j++; } s[i]=’\0’; return 1; }
8.串删除 StrDelete(s,i,len) 操作条件:串s存在,1≤i≤StrLength(s), 0≤len≤StrLength(s)-i+1。 操作结果:删除串s 中从第i个字符开始的长度为 len的子串,s的串值改变。
9.串替换 StrRep(s,t,r) 操作条件:串s,t,r存在,t不为空。 操作结果:用串r 替换串s中出现的所有与串t相等 的不重叠的子串,s的串值改变。 2018年11月26
2018年11月26 日
9
第四章 串
s.dataБайду номын сангаас
0 S
1 t
2 u
3 d
4 e
5 n
s.curlen … MAXSIZE-1
2.在串尾存储一个不会在串中出现的特殊字符作为串的 终结符,以此表示串的结尾。比如C语言中处理定长串 的方法就是这样的,它是用'\0'来表示串的结束。 3. 设定长串存储空间:char s[MAXSIZE+1]; 用s[0] 存放串的实际长度,串值存放在s[1]~s[MAXSIZE],字 符的序号和存储位置一致,应用更为方便。
第四章 串
4.1 串的定义及基本运算
4.2 串的存储结构
4.3 模式匹配算法的实现 4.4 小结与习题
2018年11月26 日
1
第四章 串
串(字符串)是一种特殊的线性表,它的数据元 素仅由一个字符组成,计算机非数值处理的对象经常 是字符串数据,在事物处理程序中,一般也是作为字 符串处理的。 4.1 串的定义及基本运算
6.子串定位 StrIndex(s,t):找子串t在主串s中首 次出现的位置 操作条件:串 s,t存在。操作结果:若t∈s,则操作 返回t在s中首次出现的位置,否则返回值为-1。
2018年11月26 日
7
第四章 串
7.插入 StrInsert(s,i,t) 操作条件:串s,t存在,1≤i≤StrLength(s)+1。 操作结果:将串t插入到串s 的第i个字符位置上。
一、串和基本概念 串(String)是零个或多个字符组成的有限序列。 一般记作:S=“a1a2a3…an” 其中S是串名,双引号括起来的字符序列是串值; ai(1≦i≦n)可以是字母、数字或其它字符;串中所包 含的字符个数称为该串的长度。长度为零的串称为空 串(Empty String),它不包含任何字符。 2018年11月26
2018年11月26 日
11
第四章 串
2. 求子串 int StrSub (char *t, char *s, int i, int len) { int slen; slen=StrLength(s); if ( i<1 || i>slen || len<0 || len>slen-i+1) { printf("参数不对"); return 0; } for (j=0; j<len; j++) t[j]=s[i+j-1]; t[j]=’\0’; d e n t.data 例2. s.curlen return 1;}
2018年11月26 日
5
第四章 串
3.连接操作 :StrConcat (s1,s2,s) 或StrConcat (s1,s2)
操作条件:串s1,s2存在。
操作结果:两个串的联接就是将一个串的串值紧接 着放在另一个串的后面,连接成一个串。前者是产生 新串s,s1和s2不改变; 后者是在 s1的后面联接 s2的串 值,s1改变, s2不改变。
4.求子串SubStr (s,i,len): 操作条件:串s存在,1≤i≤StrLength(s), 0≤len≤StrLength(s)-i+1。 操作结果:返回从串s的第i个字符开始的长度为 len 的子串。len=0得到的是空串。
2018年11月26 日
6
第四章 串
5.串比较 StrCmp(s1,s2) 操作条件:串s1,s2存在。操作结果:若s1= =s2,操 作返回值为0;若s1<s2, 返回值<0;若s1>s2, 返回 值>0。
2018年11月26 日
4
第四章 串
三、串的基本运算 1.求串长StrLength(s): 操作条件:串s存在;操作结果:求出串s的长度。 2.串赋值StrAssign(s1,s2) 操作条件: s1是一个串变量,s2或者是一个串常量, 或者是一个串变量(通常s2 是一个串常量时称为串赋 值,是一个串变量称为串拷贝)。 操作结果:将s2的串值赋值给s1, s1原来的值被覆 盖掉。
日 8
第四章 串
4.2 串的存储结构
4.2.1 串的定长顺序存储 类似于顺序表,用一组地址连续的存储单元存储串值 中的字符序列,所谓定长是指按预定义的大小,为每 一个串变量分配一个固定长度的存储区,如:
1. 类似顺序表,用一个指针来指向最后一个字 符,这样表示的串描述如下: typedef struct { char data[MAXSIZE]; int curlen; } SeqString;
日 2
第四章 串
通常将仅由一个或多个空格组成的串称为空白串 (Blank String) 。
注意:空串和空白串的不同。 二、串的术语 1.主串和子串:串中任意个连续字符组成的子序列称 为该串的子串,包含子串的串相应地称为主串。通常 将子串在主串中首次出现时的该子串的首字符对应的 主串中的序号,定义为子串在主串中的序号(或位 置)。例如,设A和B分别为 A=“This is a string” B=“is” 则B是A的子串,A为主串。