DS04-串-数据结构(C语言版)(第3版)-唐国民-清华大学出版社
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第四章 串
顺序串的基本操作的实现
串的数据类型说明采用如下形式: #define MaxStrSize 256 typedef struct{ char ch[MaxStrSize]; int length; }SeqString; /*使用时可不用\0作为结束标志*/
第四章 串
求串长Strlen(s) :返回串s的元素个数。
例如,有下列四个串s1,s2,s3,s4: s1= “pro”, s2= "Program" s3= "program" ,s4= "program□" 以上四个串彼此互不相等,且s4>s3>s1>s2。
第四章 串
串变量与串常量
串变量:其取值是可以改变的,它必须用名 字来识别;
串常量:和整常数、实常数一样,具有固定 的值,在程序中只能被引用但不能改变其值, 即只能读不能写。
int Strlen(SeqString s) { return(s.length); }
/*s是结构体类型*/
第四章 串
串复制Strcpy(s,t):将串s复制到串t中。
SeqString *Strcpy(SeqString s, SeqString *t) { int i; for(i=0;i<s.length;i++) t→ch[i]=s.ch[i]; t→length=s.length; /*置串t的长度*/ return(t);
第四章 串
求子串Substr(s,pos,len,sub):从串 s中的第pos个字符开始取长度为len的 子串构成串sub。 子串的定位Index(s,t):在串s中寻找 串t第一次出现时,串t首字符在串s中 的位置。若找到,则返回该位置,否则 返回0。
第四章 串
串插入StrInsert(s,pos,t):将串t插 入在串s的位置pos上。
串删除StrDelete(s,pos,len):从串s 中位置pos开始,删除len个字符。
子串替换操作Replace(s,t,v):将串s 中的子串t全部替换成串v。
第四章 串
4.2 串的表示和实现
串的定长顺序存储 串的顺序存储结构,简称为顺序串。 用一组地址连续的存储单元来依次存 放串中的字符序列,串中相邻的字符 顺序存放在相邻的存储单元中。所谓 定长,指按照预先定义的大小为每一 个串分配一个固定的存储区域。 通 常有下列两种实现方式:
类型定义如下:
#define MaxStrSize 256 /*串可能的最大长度*/
typedef struct
{ char ch[MaxStrSize];
int length;
}SeqString;
/*SeqString是顺序串类型*/
第四章 串
在这种方式中,字符串的串值由ch[0] 开始存放。当然,也可以将串的实际长度 存储在0号单元中,实际串值从1号单元处 开始存放。实际应用中究竟采用哪种结构, 需要根据情况进行权衡。在C语言中是采 用字符'\0'作为串的终结符的方式。
/*S是一个顺序串变量*/
第四章 串
这种存储方法不能直接得到串的长 度,而是判断字符是否为'\0'来确定串 是否结束,串长是隐含的。所以串空间 最大值为MaxStrSize时,最多只能放 MaxStrSize-1个字符。
第四章 串
第二种不使用终结符,用一个整数length 来指示串的实际长度,length-1表示串中 最后一个字符的存储位置。
子串的位置 以子串的第一个字符在主 串中的位置来表示。
例如:串A=“China Beijing”, B=“Beijing”, 则它们的长度分别为13、 7。B在A中的位置是7。
第四章 串
串的比较 当且仅当两个串的长度相等,并且 各个对应位置的字符也都相同,称两个串相等; 当两个串不相等时,可按“字典顺序”区分大 小(在C语言中,按字符ASCII码的大小为准)。
第四章 串
第一种使用定长的字符数组存放串,一般使用一 个不会在串中出现的特殊字符(如‘\0’)放在串 值的末尾(不记入串长)来表示串的结束。
类型定义如下:
#define MaxStrSize 256 /*串可能的最大长度*/ typedef char SeqString[MaxStrSize];
SeqString S;
第四章 串
第四章 串
基本概念 串的存储结构 串的基本操作 串的模式匹配
第四章 串
4.1 串的定义和基本操作
串定义:是字符串的简称,是由零个或多
个字符组成的有限序列。一般记为: S="a1a2……an" (n≥0)
其中:S是串名;用双引号(“”)括起 的字符序列是串的值;ai(1≤i≤n)可 以是字母、数字或其它符; n是串中字 符的个数, 称为串的长度。
第四章 串
空串与空格串 长度为零(n=0) 的串称为空串(Null String),它不 包含任何字符。由空格字符组成的串, 称为空格串(Blank String)。它的长 度为串中空格字符的个数。
子串与主串 串中任意个连续字符组 成的子序列称为该串的子串。包含子串 的串称为该子串的主串。
第四章 串
}
Байду номын сангаас 第四章 串
串联接Strcat(s,t):
将串t联接到串s的末尾形成新串s。 若t完全联接到s的末尾,表示联接 成功则返回1,否则不成功返回0。
例如,在C语言中,有下列语句: char x[]="456";
/*x是一个串变量名,它的值为字符序列456,而不是整数456*/
char string1[]="string";
/*string1是一个串变量名,字符序列string是赋给它的值*/
第四章 串
串的基本操作
▪求串长Strlen(s) :求串s的长度,Strlen(s)的值 是一个非负整数。若s是一个空串,则Strlen(s)=0 ▪串赋值StringAssign(s,string_constant) :给串 s赋值。其中string_constant可为串变量、串常量 或经过适当运算所得到的串值。 ▪串复制Strcpy(s,t):由串s复制得到串t。 ▪串联接Strcat(s,t):将串t联接到串s的末尾形成 新串s。 ▪串比较Strcmp(s,t):比较s和t的大小,若s<t, 则返回值小于0;若s>t,则返回值大于0;若s=t, 则返回值为0 。