第四章 串完整版
严蔚敏数据结构-第四章 串
15
(2)S1串长 最大串长 串长<最大串长 串长 最大串长; S1,S2串长和 最大串长 串长和>最大串长 串长和 最大串长;
S1 6 a b c d e f S2 6 g h i j k l T 8 a b c d e f g h
3
串的抽象数据类型的定义: 串的抽象数据类型的定义: ADT String{ 数据对象: 数据对象:D={ai|ai∈CharacterSet, i=1,2,...,n, n>=0} 数据关系: 数据关系:R1={<ai-1,ai>|ai-1,ai∈D, i=2,...,n} 基本操作: 基本操作: StrAssign(&T, chars)
11
作业: 作业: 1.用5种串的基本操作(StrAssign、StrCompare、StrLen Concat、SubString)来逻辑实现StrInsert(&S, pos, T)操作 、 操作. )
Status StrInsert(String S, int pos , String T) { if ……….. return error; , , ); ); ); );
chars是字符串常量。生成一个其值等于chars的串 。 是字符串常量。生成一个其值等于 的串T。 是字符串常量 的串
StrCopy(&T, S)
存在则由串S复制得串 串S存在则由串 复制得串 存在则由串 复制得串T
StrEmpty(S)
存在则若S为空串 串S存在则若 为空串 返回真否则返回假 存在则若 为空串,返回真否则返回假
Sub返回串 的第pos个字符起长度为 返回串S的第 个字符起长度为len的子串 用Sub返回串S的第pos个字符起长度为len的子串
数据结构——第4章 串(C#)
4.1.1 什么是串 串(或字符串)是由零个或多个字符组成的有限序列。 记作str="a1a2…an"(n≥0),其中str是串名,用双引号括 起来的字符序列为串值,引号是界限符,ai(1≤i≤n)是一 个任意字符(字母、数字或其他字符),它称为串的元素, 是构成串的基本单位,串中所包含的字符个数n称为串的 长度,当n=0时,称为空串。
4.2 串的存储结构
4.2.1 串的顺序存储结构-顺序串
和顺序表一样,用一个data数组(大小为MaxSize)和 一个整型变量length来表示一个顺序串,length表示data数 组中实际字符的个数。 定义顺序串类SqStringClass如下:
class SqStringClass { const int MaxSize=100; public char[] data; //存放串中字符 public int length; //存放串长 public SqStringClass() //构造函数,用于顺序串的初始化 { data=new char[MaxSize]; length=0; } //顺序串的基本运算 }
(9)串输出DispStr() 将当前串s的所有字符构成一个字符串并输出。对应的算 法如下:
public string DispStr() { int i; string mystr=""; if (length==0) mystr = "空串"; else { for (i=0;i<length;i++) mystr+=data[i].ToString(); } return mystr; }
数据结构第4章 串
/*若串s和t相等则返回0;若s>t则返回正数;若s<t则返 回负数*/
{ int i;
for (i=0;i<s.len&&i<t.len;i++)
if (s.ch[i]!=t.ch[i]) return(s.ch[i] - t.ch[i]);
初 始 条 件 : 串 S 存 在 ,1≤pos≤StrLength(S) 且 1≤len≤StrLength(S)-pos+1
操作结果:用Sub返回串S的第pos个字符起长度为len的子串
返回主目录
(11)StrIndex(S,T,pos)
初始条件: 串S和T存在,T是非空串, 1≤pos≤StrLength(S)
return(s.len); }
返回主目录
(7)清空函数
StrClear(SString *s) /*将串s置为空串*/ {
s->len=0; }
返回主目录
(8)连接函数
(1) 连接后串长≤MAXLEN,则直接将B加在A的 后面。 (2) 连接后串长>MAXLEN且LA<MAXLEN,则B 会有部分字符被舍弃。 (3) 连接后串长>MAXLEN且LA=MAXLEN,则B 的全部字符被舍弃(不需连接)。
for (i=s->len + t.len-1;i>=t.len + pos;i--)
s->ch[i]=s->ch[i-t.len];
for (i=0;i<t.len;i++) s->ch[i+pos]=t.ch[i];
s->len=s->len+t.len;
(完整word版)数据结构 第四章(串) 考试题目(word文档良心出品)
第四章串一单项选择题:1.下列那些为空串()A)S=“ ” B)S=“”C)S=“φ” D)S=“θ”2.S1=“ABCD”,S2=“CD”则S2在S3中的位置是()A)1 B)2 C)3D)43.假设S=“abcaabcaaabca”,T=“bca”,Index (S,T,3) 的结果是()A)2 B)6 C)11 D)04.在串中,对于SubString(&Sub,S,pos,len)基本操作,pos和len的约束条件是()A)0<pos<StrLength(S)+1且1<=len<=StrLength(S)-pos+1B)0<pos<StrLength(S)+1且0<=len<=StrLength(S)-pos-1C)1<=pos<=StrLength(S) 且0<=len<=StrLength(S)-pos+1D)1<=pos<=StrLength(S) 且1<=len<=StrLength(S)-pos-15. 串是一种特殊的线性表,其特殊性体现在( )。
A.可以顺序存储B. 数据元素是一个字符C.可以链接存储D. 数据元素可以是多个字符6. 串是( )。
A.少于一个字母的序列B. 任意个字母的序列C.不少于一个字符的序列D. 有限个字符的序列7. 串的长度是( )。
A.串中不同字母的个数B. 串中不同字符的个数C.串中所含的字符的个数D. 串中所含字符的个数,且大于08. 设有S1=‘ABCDEFG’,S2=‘PQRST’,函数con(x,y)返回x和y串的连接串,subs(I,j)返回串S的从序号I的字符开始的j个字符组成的子串,len(s)返回串s的长度,则con(subs(S1,2,len(S2)),subs(S1,len(S2),2))的结果是( )。
A.BCDEF B. BCDEFG C. BCPQRST D. BCDEFEF9. 若某串的长度小于一个常数,则采用( )存储方式最为节省空间。
数据结构-第4章 串
4.1 串的类型定义
子串的序号:将子串在主串中首次出现时的该 子串的首字符对应在主串中的序号,称为子串 在主串中的序号(或位置)。 【例】 A=“abcdefbbcd”,B=“bcd”,B在A中的 序号为2。 特别地,空串是任意串的子串,任意串是其自 身的子串。
4.1.2 串的抽象数据类型定义
//查找ab子串
if (p->data==‘ a’ && p->next->data==‘b’)
{ p->data=‘x’; p->next->data=‘z’;
q=(LinkStrNode *)malloc(sizeof(LinkStrNode));
q->data=‘y’;
q->next=p->next; p->next=q;
s: a a a a b c d
t: a ab bac acb bc c ✓ 匹配成功 算法的思路是从s的每一个字符开始依次与t的 字符进行匹配。
4.2.1 Brute-Force算法
int BFIndex(SqString s,SqString t)
{ int i=0, j=0,k;
while (i<s.length && j<t.length)
4.1 串的类型定义 4.2 串的表示和实现 4.3 串的模式匹配算法
本章要求
理解: 1、串的基本概念、类型定义 2、串的存储表示和实现 3、串的KMP算法
掌握: 4、串的简单模式匹配算法(BF)
第4章 串的基本概念
串(或字符串):是由零个或多个字符组成 的有限序列。
串的逻辑表示: S=“a1a2…ai…an”,其中S为 串名,ai (1≤i≤n)代表单个字符,可以是字母、 数字或其它字符(包括空白符)。 串值:双引号括起来的字符序列。双引号不是 串的内容,只起标识作用。
第四章 串图文
在上述串的抽象数据类型定义的13种操作中,串 赋值StrAssign、串复制Strcopy、串比较 StrCompare、求串长StrLength、串联接Concat以 及求子串SubString等六种操作构成串类型的最小 操作子集。即:这些操作不可能利用其它串操作 来实现,而其它串操作(除串清除ClearString和 串销毁DestroyString外)如定位函数Index( S, T, pos )可在这个最小操作子集上实现如p72。
例如:C语言函数库中提供下列串处理函数:
gets(str) 输入一个串; puts(str) 输出一个串; strcat(str1, str2) 串联接函数; strcpy(str1, str2, k) 串复制函数; strcmp(str1, str2) 串比较函数; strlen(str) 求串长函数;
子串的定位
Replace (&S, T, V) 串的置换 StrInsert (&S, pos, T) 串的插入
StrDelete (&S, pos, len) 串的删除
} ADT String
StrAssign (&T, chars)
(串的赋值)
初始条件:chars 是字符串常量。
操作结果:把 chars中的字符串 常量 赋给 T。
StrDelete (&S, pos, len)
初始条件:串S存在
1≤pos≤StrLength(S)-len+1。
操作结果:从串S中删除第pos个字符 起长度为len的子串。
ClearString (&S)
初始条件:串S存在。 操作结果:将S清为空串。
串的基本操作集可以有不同的定义方法, 在使用高级程序设计语言中的串类型时,以该 种语言的参考手册为准。
第四章 串答案
第四章答案4.1 简述下列每对术语的区别:空串和空白串;串常量和串变量;主串和子串;静态分配的顺序串和动态分配的顺序串;目标串和模式串;有效位移和无效位移。
答:●空串是指不包含任何字符的串,它的长度为零。
空白串是指包含一个或多个空格的串,空格也是字符。
●串常量是指在程序中只可引用但不可改变其值的串。
串变量是可以在运行中改变其值的。
●主串和子串是相对的,一个串中任意个连续字符组成的串就是这个串的子串,而包含子串的串就称为主串。
●静态分配的顺序串是指串的存储空间是确定的,即串值空间的大小是静态的,在编译时刻就被确定。
动态分配的顺序串是在编译时不分配串值空间,在运行过程中用malloc和free等函数根据需要动态地分配和释放字符数组的空间(这个空间长度由分配时确定,也是顺序存储空间)。
●目标串和模式串:在串匹配运算过程中,将主串称为目标串,而将需要匹配的子串称为模式串,两者是相对的。
●有效位移和无效位移:在串定位运算中,模式串从目标的首位开始向右位移,每一次合法位移后如果模式串与目标中相应的字符相同,则这次位移就是有效位移(也就是从此位置开始的匹配成功),反之,若有不相同的字符存在,则此次位移就是无效位移(也就是从此位置开始的匹配失败)。
4.2 假设有如下的串说明:char s1[30]="Stocktom,CA", s2[30]="March 5 1999", s3[30], *p;(1)在执行如下的每个语句后p的值是什么?p=stchr(s1,'t'); p=strchr(s2,'9'); p=strchr(s2,'6');(2)在执行下列语句后,s3的值是什么?strcpy(s3,s1); strcat(s3,","); strcat(s3,s2);(3)调用函数strcmp(s1,s2)的返回值是什么?(4)调用函数strcmp(&s1[5],"ton")的返回值是什么?(5)调用函数stlen(strcat(s1,s2))的返回值是什么?解:(1) stchr(*s,c)函数的功能是查找字符c在串s中的位置,若找到,则返回该位置,否则返回NULL。
第四章 串
– 例如
• 主串S = • 子串T = CD • 则index(S,T),返回子串T在S中,第一次出现的位置3
19
串的模式匹配
Brute-Force算法基本思想: • 从目标串s 的第一个字符起和模式串t的第一个字符进行比较 • 若相等,则继续逐个比较后续字符,否则从串s 的第二个字 符起再重新和串t进行比较。 • 依此类推,直至串t 中的每个字符依次和串s的一个连续的字 符序列相等,则称模式匹配成功,此时串t的第一个字符在串s 中的位置就是t 在s中的位置,否则模式匹配不成功。
两式联立可得:“T0…Tk-1”= “Tj-k…Tj-1”
注意:j为当前已知的失配位置,我们的目标是计算新起点k。式中仅剩 一个未知数k,理论上已可解!
奇妙的结果:k仅与模式串T有关!
27
新起点k怎么求?
根据模式串T的规律:“T0…Tk-1”=“Tj-k …Tj-1” 由当前失配位置j(已知),归纳计算新起点k的表达式。
j=next[j]的位置(即模式串继续向右移动),再比较 si 和 tj 。
依次类推,直到下列两种情况之一: 1)j退回到某个j=next[j]时有 si = tj,则指针各增1,继续匹配; 2)j退回至j=0,此时令指针各增1,即下一次比较 si+1和 t0 。
30
串的模式匹配:KMP算法
• 模式串的next函数
6
串的基本概念
4.两个字符串相等的充分必要条件为两个字符串的长度相等,并 且对应位置上的字符相等。
例如:‘abcd’ ≠ ‘bacd’ ‘abcd’ = ‘abcd’
7
串的基本操作
1.给串变量赋值 ASSIGN(S1,S2)
数据结构第四章串
(2) 置换操作:用联接算法来实现。用在求子串序号(a,b,h)中得到的 ind 将a分成3部分:第一部分是b在a中的第一个位置前的子串substr (a,1,ind-1);第二部分是b(以c来代替);第三部分是b在a中的最后一个 位置后的子串substr(a,ind+m,n)。 即 a substr(a,I,ind-1)||c||substr(a,ind+m,n)
4. 2 串的基本运算
对于串的基本操作,许多高级语言均提供了相应的运算或标准 库函数来实现。下面仅介绍几种常用的串运算。 (1)联接(concatenation) 联接是串的最基本,最重要的运算。两个串的联接是将一个串 紧接着放在另一个串的末尾。联接用符号“||”表示。 例如:a=”bei” b=“jing” a || b=“beijing” (2)求子串(substr) SUBSTR(a,m,n)功能: 从a 中截取子串,从第m个字符到第n个 字符的子串(m<n)。子串应是将串a中取出从标号m开始的连续n -m+1个字符。 例:SUBSTR(“ABCDEFG”,2,3)=”BC” 利用求子串及联接两种运算可以完成对串的插入、删除和修改。 例如: a=“bejing” b=“iy” ,将b插入到a的第二个字符之后 得到新的串s,则 s=substr(a,1,2) || b || substr(a,3,6) =“beiyjing”
(5)置换(repleace) 置换运算repleace(a,b,c)表示在a中搜索b,若b是a的 子串,就以c代替b,若不是,则经置换后,a不变。 例如:a=“monday”, b=“mon”, c=“thurs” repleace(a,b,c)=“thursday” 置换运算是将串a中所有的子串b用c来代替。 在一部分程序设计语言中没有实现,仍可用前三种运 算来完成。 置换算法过程:实现置换运算repleace(a,b,c),同 样也是在a中搜索是否与b相同的子串,若有,以c来代 替,再继续向下搜,直到在a中找不到和b相同的子串 为止。
数据结构第四章:串
例2、串的定位 、串的定位index(s,t,pos)
在主串s中取从第 个字符起、 相等的子串和T比较 在主串 中取从第pos个字符起、长度和串 相等的子串和 比较,若 中取从第 个字符起 长度和串T相等的子串和 比较, 相等,则求得函数值为i,否则值增1直至 中不存在和串T相等的子串 直至S中不存在和串 相等,则求得函数值为 ,否则值增 直至 中不存在和串 相等的子串 为止。 为止。
}
4.2 串的表示和实现
首先强调:串与线性表的运算有所不同,是以“串的整体” 首先强调:串与线性表的运算有所不同,是以“串的整体”作 为操作对象,例如查找某子串, 为操作对象,例如查找某子串,在主串某位置上插入一个子串 等。 串有三种机内表示方法: 串有三种机内表示方法:
定长顺序存储表示
顺序 存储 ——用一组地址连续的存储单元存储串值的字 用一组地址连续的存储单元存储串值的字 符序列, 静态存储方式 方式。 符序列,属静态存储方式。
4.1 串类型的定义 4.2 串的表示和实现
4.1 串的类型定义
4.1.1串的定义
定义:串(string)是由零个或多个任意字符组成的字 符序列,是数据元素为单个字符的特殊线性表。 的特殊线性表。 是数据元素为单个字符的特殊线性表 记为:an”
(n≥0 )
第4章 串(String) 章 )
本章主题:串的各种基本运算及其实现 本章主题: 教学目的:了解数据结构的基本概念, 教学目的:了解数据结构的基本概念,理解常用术语 教学重点: 教学重点: 掌握串的基本概念及其基本运算 掌握串的存储结构 主要内容: 主要内容: 1.串的基本概念 2.串的存储结构 2.串的存储结构 3.串的基本运算及其实现 3.串的基本运算及其实现
串其中0<=pos<=strlen(s)-1,且数组 且数组sub至少可容纳 至少可容纳len+1个字符。*/ 个字符。 串其中 且数组 至少可容纳 个字符
04 串d
子串: 子串:串中任意个连续的字符组成的子序列称 为该串的子串。 为该串的子串。 主串:包含子串的串相应地称为主串。 主串:包含子串的串相应地称为主串。 空串: 时的串为空串。 空串: n=0时的串为空串。 时的串为空串 空格串: 空格串:由一个或多个称为空格的特殊字符组 成的串。 成的串。 通常将字符在串中的序号称为该字符在串中的 通常将字符在串中的序号称为该字符在串中的 位置。 位置。
ADT LinearList{ 数据元素: 为某一数据对象} 数据元素 D={ai| ai∈D0, i=1, 2, …,n,n≥0,D0为某一数据对象 关系: S={<ai, ai+1> | ai, ai+1∈D0,i=1, 2, …, n-1} 关系 基本操作: 基本操作 InitList(L): 初始化 DestroyList(L): 销毁 ClearList(L): 置空表 EmptyList(L): 判断表是否为空 ListLength(L): 求表长 Locate(L, e): 查找 GetData(L, i): 求第 个结点 求第i个结点 InsList(L, i, e): 插入 DelList(L, i, &e): 删除 } ADT LinearList
9
第四章 串
串的定义 抽象数据类型串的实现
定长顺序串 堆串 块链串
模式匹配 串的应用举例: 串的应用举例:文本编辑 要点小结 参考书目及网络资源 讨论时间
School of Computer Sci. & Eng.,Wenzhou University
10
定长顺序串
定长顺序串是将串设计成一种结构类型 串的 定长顺序串是将串设计成一种结构类型,串的 是将串设计成一种结构类型 存储分配是在编译时完成的。 存储分配是在编译时完成的。 定长顺序串类型定义 #define MAXLEN 40 typedef struct {//串结构定义 串结构定义 char ch[MAXLEN]; int len; } SString;
算法与数据结构考研试题精析(第二版)第4章串答案概要
第四章串一、选择题1.B 2.E 3.C 4.A5.C6.A7.1D 7.2F 8.B注9.D 10.B注:子串的定义是:串中随意个连续的字符构成的子序列,并规定空串是随意串的子串,随意串是其自己的子串。
若字符串长度为n(n>0),长为n的子串有1个,长为n-1的子串有2个,长为n-2的子串有3个,,,,长为1的子串有n个。
因为空串是任何串的子串,所以此题的答案为:8*(8+1)/2+1=37。
应选B。
但某些教科书上以为“空串是随意串的子串”无心义,所以以为选C。
为防止考试中的二意性,编者以为第9题出得好。
二、判断题1.√2.√3.√三.填空题1.(1)由空格字符(ASCII值32)所构成的字符串(2)空格个数23.随意个连续的字符构成的子序列4.5 5.O(m+n) 6.011223127.010104218.(1)模式般配(2)模式串.字符9.(1)其数据元素都是字符(2)次序储存(3)和链式储存(4)串的长度相等且两串中对应地点的字符也相等10.两串的长度相等且两串中对应地点的字符也相等。
11.’xyxyxywwy’12.*s++=*t++或(*s++=*t++)!=‘\0’13.(1)chars[] (2)j++ (3)i>=j14.[题目剖析]此题算法采纳次序储存构造求串s和串t的最大公共子串。
串s 用i指针(1<=i<=s.len)。
t串用j指针(1<=j<=t.len)。
算法思想是对每个i(1<=i<=s.len,即程序中第一个WHILE循环),来求从i开始的连续字符串与从j(1<=j<=t.len,即程序中第二个WHILE循环)开始的连续字符串的最大般配。
程序中第三个(即最内层)的WHILE循环,是当s中某字符(s[i])与t中某字符(t[j])相等时,求出局部公共子串。
若该子串长度大于已求出的最长公共子串(初始为0),则最长公共子串的长度要改正。
数据结构-第四章串
数据结构-第四章串串也叫字符串,它是由零个或多个字符组成的字符序列。
基本内容1 串的有关概念串的基本操作2 串的定长顺序存储结构,堆分配存储结构;3 串的基本操作算法;4 串的模式匹配算法;5 串操作的应⽤。
学习要点1 了解串的基本操作,了解利⽤这些基本操作实现串的其它操作的⽅法;2 掌握在串的堆分配存储结构下,串的基本操作算法;3 掌握串的模式匹配算法;第四章串 4.1 串的基本概念4.2 串存储和实现4.3 串的匹配算法4.4 串操作应⽤举例第四章串 4.1 串的基本概念 4.2 串存储和实现 4.3 串的匹配算法 4.4 串操作应⽤举例第四章串4.1 串的基本概念 4.2 串存储和实现 4.3 串的匹配算法 4.4 串操作应⽤举例4. 1 串类型的定义⼀、串的定义1 什么是串串是⼀种特殊的线性表,它是由零个或多个字符组成的有,a2, a3, ... a n’限序列,⼀般记作s = ‘a1其中 s----串名, a1,a2, a3, ... a n----串值串的应⽤⾮常⼴泛,许多⾼级语⾔中都把串作为基本数据类型。
在事务处理程序中,顾客的姓名、地址;货物的名称、产地。
可作为字符串处理,⽂本⽂件中的每⼀⾏字符等也可作为字符串处理。
下⾯是⼀些串的例⼦:(1)a = ‘ LIMING’(2)b = ‘NANJING UNIVERSITY OF SCIENCE &TECHNOLOGY’(3)c = ‘ DATA STRUCTURE’(4)d = ‘’说明:1) 串中包含的字符个数,称为串的长度。
长度为0的串称为空串,它不包括任何字符,上⾯(4)中的串d 是空串,(5)中的e 是包含⼀个空格符的空格串;2)串中所包含的字符可以是字母、数字或其他字符,这依赖于具体计算机所允许的字符集。
2 串的有关术语1)⼦串串中任意连续的字符组成的⼦序列称为该串的⼦串例:c = ‘ DATA STRUCTURE’,f=‘DATA’ f是c的⼦串2)⼦串的位置⼦串T 在主串S中的位置是指主串S中第⼀个与T相同的⼦串的⾸字母在主串中的位置。
数据结构 第四章 串
第四章串串又称字符串,是一种特殊的线性表,它的每个元素仅由一个字符组成。
计算机上非数值处理的对象基本上是字符串数据。
在较早的程序设计语言中,字符串仅作为输入和输出的常量出现。
随着计算机应用的发展,在越来越多的程序设计语言中,字符串也可作为一种变量类型出现,并产生了一系列字符串的操作。
在信息检索系统、文字编辑程序、自然语言翻译系统等等应用中,都是以字符串数据作为处理对象的。
本章将讨论串的存储结构和基本操作。
4.1 串的基本概念4.1.1 串的自然语言定义串(string)(或字符串)是由零个或多个字符组成的有限序列,一般记为:S="a1 a2 …… a n" (n≥0)其中,S是串名,用双引号括起来的字符串序列是串的值;a i(1≤i≤n)可以是字母、数字或其他字符;串中字符的个数n称为串的长度。
长度为0的串称为空串。
需要注意的是,串值必须用一对双引号括起来,但双引号本身不属于串,它的作用只是为了避免与变量名或数的常量混淆。
如"tempt"是个串,tempt则是变量名;"23"是串,而23则是一个常量.串中任意个连续的字符组成的子序列称为该串的子串,如:串S="This is a string",其中"This"是一个子串,"string"也是一个子串。
求子串在串中的起始位置称为子串定位或模式匹配。
例如,设A,B,C为如下三个串:A="data",B="structure",C="data structure",则它们的长度分别是4,9,14,A和B都是C的子串,A在C中的位置是1,而B在C中的位置是6。
下面注意区别空格串与空串的概念。
在各种应用中,空格常常是串的字符集合中的一个元素,因而可以出现在其他字符中间。
由一个或多个空格组成的串称为空格串,也就是说空格串中只有空格字符,空格串的长度不为零。
06《数据结构》第四章串
06《数据结构》第四章串数据结构北京邮电大学信息安全中心武斌母版副本12上章内容上一章(栈和队列)内容:.掌握栈和队列这两种抽象数据类型的特点.熟练掌握栈类型的两种实现方法.熟练掌握循环队列和链队列的基本操作实现算法.理解递归算法执行过程中栈的状态变化过程母版副本13本次课程学习目标.理解“串”类型定义中各基本操作的特点.能正确利用这些特点进行串的其它操作.理解串类型的各种存储表示方法.理解串匹配的各种算法学习完本次课程,您应该能够:母版副本14本章课程内容(第四章串)4.1 串类型的定义4.2 串的表示和实现4.3 串的模式匹配算法4.4 串操作应用举例dian3dian3dian3dian3母版副本15第四章串.串即字符串,是计算机非数值处理的主要对象之一。
在早期的程序设计语言中,串仅作为输入和输出的常量出现。
.随着计算机应用的扩展,需要在程序中进行对“串”的操作,从而使众多编程语言增加了串类型,以便程序员可以在程序中对“串变量”进行操作。
.现今使用的计算机的硬件结构主要是面向数值计算的需要,基本上没有提供对串进行操作的指令。
.因此需要用软件来实现串数据类型。
而且,在不同的应用中,所处理的串具有不同的特点,为有效地实现串的操作,需要根据具体情况使用合适的存储结构。
母版副本16串的类型定义4.1 串的类型定义4.2 串的表示和实现4.3 串的模式匹配算法4.4 串操作应用举例diandian3dian3dian3母版副本17串的类型定义.串(String)是零个或多个字符组成的有限序列。
一般记作S=“a1a2a3…an”,其中S是串名,双引号括起来的字符序列是串值;ai(1≦i≦n)可以是字母、数字或其它字符;串中所包含的字符个数称为该串的长度。
长度为零的串称为空串(EmptyString),它不包含任何字符。
.通常将仅由一个或多个空格组成的串称为空格串(BlankString)。
.注意:空串和空白串的不同,例如“”和“”分别表示长度为1的空格串和长度为0的空串。
串频 第四章
“维四,你猜猜看,下车的人和不下车的人都去了哪里?”任科一边注意着窗外,一边示意维四发表听故事感言。
“如果这是探讨人性的问题,那么追求光明、战胜恐惧而果断行动、以及善良顾及别人的感受的人,应该有好下场。”维四托腮注视着另一边窗外,漫不经心地回应道。
任科啧了一声,刚要接着说,维四突然按他肩膀说:“等等!”
第四章工作之反方向二
本城小五百万常住人口,唯有一座火车站,那流量自然可观。任科的印象里,火车站里无论何时去,那都是人挤人的,哪怕是大年三十晚上(去年他就是年三十晚上赶的火车,其它点那就是买不上票啊!)。所以现在在出站口这里挤着,那是一点都不奇怪的。任科是个做事有规划又细致的,他打算着要把曹岑曦已知的行程都亲自走一遍。首先就是这样从出站口被挤到他说的广场,然后转到出租车上客处。
“二十二分钟,考虑到体弱走得要慢,还可能中间茫然发呆——他说过出来了有一会儿不知所措,估算三十分钟左右。”维四已掐好时间。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
“子串在主串中的位置 子串在主串中的位置”意指子串 子串在主串中的位置 中的第一个字符在主串中的位序 位序。 位序
假设 S = ′abcaabcaaabc′, T = ′bca′
Index(S, T, 1) = 2; Index(S, T, 3) = 6; Index(S, T, 8) = 0;
例如: 假设 S = ′abcaabcaaabca′,T = ′bca′
串的例子
例如: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,而b在d中的位置是5
注意:单引号是为字符串区别于变量名而设,它不是字符串的内容
又如串的置换函数:
pos i pos
sub T串
S串 V串
news 串
sub V串
练习
假设有如下的串说明: 假设有如下的串说明: char s1[30]="Stocktom,CA", s2[30]="March 5 1999", s3[30]; (1)在执行下列语句后,s3的值是什么? strcpy(s3,s1); strcat(s3,","); strcat(s3,s2); (2)调用函数strcmp(s1,s2)的返回值是什么? (3)调用函数strcmp(&s1[5],"ton")的返回值是什么? (4)调用函数stlen(strcat(s1,s2))的返回值是什么? (1)strcpy函数功能是串拷贝,strcat函数的功能 (3)首先,我们要知道&s1[5]是一个地址,当放 (4)strlen是求串长的函数,我们先将s1,s2 (2)函数strcmp(串1,串2)的功能是串比较,按串 是串联接。所以: 在函数strcmp中时,它就表示指向以它为首地址 联接起来,值是"Stocktom,CAMarch 5,1999", 的大小进行比较,返回大于0,等于0或小于0的值以 的一个字符串,所以在strcmp( &s1[5],"ton")中, 在执行strcpy(s3,s1); 后,s3的值是 表示串1比串2 大,串1等于串2 ,串1小于串2。因此 数一数有几个字符?是不是23个(空格也是一 "Stocktom,CA" 前一个字符串值是"tom,CA",用它和"ton"比较,应 在调用函数strcmp(s1,s2)后,返回值是大于0的数(字 个)? 所以返回值是23。 该是后者更大,所以返回值是小于0的数。 在执行strcat(s3,","); 后,s3的值变成 符比较是以ascii码值相比的) "Stocktom,Ca," 在执行完strcat(s3,s2);后,s3的值就成了 "Stocktom,Ca,March 5,1999"
子串为“ 子串为“串” 中的一个字符子序列
例如: 例如: SubString( sub, ′commander′, 4, 3) 求得 sub = ′man′ ; SubString( sub, ′commander′, 1, 9) 求得 sub = ′commander′; SubString( sub, ′commander′, 9, 1) 求得 sub = ′r′;
若 V = ′x′, 则经置换后得到 S = ′axaxaax′ 若 V = ′bc′, 则经置换后得到 S = ′abcabcaabc′
二、串的抽象数据类型定义
4.1 串 类 型 的 定 义
StrInsert(&S,pos,T) 初始条件: 初始条件:串S和T存在,1≤pos≤Strlength(S)+1 存在, 操作结果:在串S中的第pos个字符之前插入串T 操作结果:在串S中的第pos个字符之前插入串T。 pos个字符之前插入串 StrDelete(&S,pos,len) 初始条件: 初始条件:串S存在,1≤pos≤Strlength(S)-len+1 存在, ≤pos≤Strlength(S)-len+1 操作结果:从串S中删除第pos个字符起长度为len的子串。 操作结果:从串S中删除第pos个字符起长度为len的子串。 pos个字符起长度为len的子串 DestroyString(&S) 初始条件: 初始条件:串S存在。 存在。 操作结果: 操作结果:串S被销毁。 被销毁。 }ADT String
例如,可利用串比较、求串长和求子串等操作 实现定位函数Index(S,T,pos)。
算法的基本思想为: 算法的基本思想为:
StrCompare(SubString(S, i, StrLength(T)),T )
?0
i
S串 pos T串 n-m+1 T 串
二、串的抽象数据类线性表,其特殊性体现 在()
数据元素是一个字符
4.1 串类型的定义
二、串的抽象数据类型定义 ADT String { 数据对象: ∈CharacterSet,i=1,2…n 数据对象:D={ai|ai∈CharacterSet,i=1,2 n,n≥0} 数据关系:R={<ai-1,ai> |ai-1,ai∈D,i=2,3, ,n} ∈D,i=2,3,…,n} 数据关系: 基本操作: 基本操作:
其中, 是串的名, 单引号括起来的字符序列是 其中,s是串的名,用单引号括起来的字符序列是 串的值。 (1≤i≤n)可以是字母 数字或其它字符。 可以是字母、 串的值。ai(1≤i≤n)可以是字母、数字或其它字符。 注:串值必须用一对单引号括起来,区别于变量名或 串值必须用一对单引号括起来, 数的常量。例如:‘1’与1 数的常量。例如: 与
例:由上述五个最小操作集实现Index(S,T,pos)。 由上述五个最小操作集实现Index(S,T,pos)。 Index(S,T,pos) int index(String S,String T,int pos) {if(pos>0) {n=Strlength(S);m=Strlength(T);i=pos; while(i<=n m+1) while(i<=n-m+1) { SubString(sub,S,i,m); if(StrCompare(sub,T)!=0) ++i; else return i; } } return 0; }
4.1 串类型的定义 一、基本概念
串相等——只有当两个串的长度相等,并且各个对应位 只有当两个串的长度相等, 串相等 只有当两个串的长度相等 置的字符都相等,称两串相等。 置的字符都相等,称两串相等。 空格串(blank string)——由一个或多个空格组成的串。 由一个或多个空格组成的串。 空格串(blank string) 由一个或多个空格组成的串 空格串和“空串”区别: 空格串和“空串”区别: 空格串的长度是空格的个数。 空串”长度为零。 空格串的长度是空格的个数。 “空串”长度为零。 串与线性表的区别: 串与线性表的区别: 逻辑结构相似:区别仅在于串的数据对象约束为字符集。 逻辑结构相似:区别仅在于串的数据对象约束为字符集。 表示与实现差别很大:线性表以“单个元素” 表示与实现差别很大:线性表以“单个元素”作为操作对 象;串以“串的整体”作为操作对象; 串以“串的整体”作为操作对象;
SubString(sub, ′commander′, 4, 7) sub = ? SubString(sub, ′beijing′, 7, 2) = ? sub = ?
起始位置和子串长度之间存在约束关系
SubString(′student′, 5, 0) = ′′ 的子串为“合法” 长度为 0 的子串为“合法”串
在上述抽象数据类型定义的13种操作中, 串赋值StrAssign、串复制Strcopy、 、串复制 串赋值 、 串比较StrCompare、求串长 串比较 、求串长StrLength、 、 串联接Concat以及求子串 以及求子串SubString 串联接 以及求子串 等六种操作构成串类型的最小操作子集。 等六种操作构成串类型的最小操作子集 即:这些操作不可能利用其他串操作来实现, 反之,其他串操作(除串清除ClearString和串 销毁DestroyString外)可在这个最小操作子 集上实现。
4.1 串类型的定义 一、基本概念
串的长度——串中字符的数目n。 串中字符的数目n 串的长度 串中字符的数目 空串(Null string)——长度为零的串。用“Ø”表示。 长度为零的串。 表示。 空串(Null string) 长度为零的串 表示 子串——串中任意个连续的字符组成的子序列。 串中任意个连续的字符组成的子序列。 子串 串中任意个连续的字符组成的子序列 主串——包含子串的串相应地称为主串。 包含子串的串相应地称为主串。 主串 包含子串的串相应地称为主串 位置——称字符在序列中的序号为该字符在串中的位置。 称字符在序列中的序号为该字符在串中的位置。 位置 称字符在序列中的序号为该字符在串中的位置 子串在主串中的位置则以子串的第一个字符在主串在 子串在主串中的位置则以子串的第一个字符在主串在 的位置来表示。 的位置来表示。
第四章
串
4.1 串类型的定义 4.2 串的表示和实现 4.3 串的模式匹配算法
串(即字符串)是一种特殊的线性表,它的数据 即字符串)是一种特殊的线性表, 元素仅由一个字符组成。 元素仅由一个字符组成。
4.1 串类型的定义 一、基本概念
是由零个 字符组成的有限序列。 串(String)——是由零个或多个字符组成的有限序列。 (String) 是由零个或多个字符组成的有限序列 记为:s= a 记为:s=‘a1a2…an’ a (n≥0)
二、串的抽象数据类型定义