- 1、本文档共56页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四章 串;4.1 串类型的定义;一、串的基本概念
串是字符串的简称。它是一种在数据元素的组成上具有一定约束条件的线性表,即要求组成线性表的所有数据元素都是字符,所以,人们经常又这样定义串:
串(String)是零个或多个字符组成的有限序列。;子串与主串:串中任意个连续字符组成的子序列称为该串的子串,包含子串的串相应地称为主串。
子串的位置:通常将子串在主串中首次出现时的该子串的首字符对应的主串中的序号,定义为子串在主串中的序号(或位置)。;例如,设A和B分别为
A=This is a string, B=is
则B是A的子串,A为主串。B在A中出现了两次,其中首次出现所对应的主串位置是3。因此,称B在A中的序号(或位置)为3
特别地,空串是任意串的子串,任意串是其自身的子串。
串的相等;二、串的基本操作
对于串的基本操作,许多高级语言均提供了相应的运算或标准库函数来实现。下面仅介绍几种在C语言中常用的串运算。
定义下列几个变量:
char s1[20]=dirtreeformat,
char s2[20]=file.mem;
char s3[30],*p;
int result;;(1)求串长 strlen(s);
(2)串赋值或串拷贝(copy)
strcpy(to, from);
(3)联接(concatenation)
strcat(to,from1,from2)
(4)串比较(compare)
strcmp(s1,s2);
(5)求子串
SubString (Sub, S, pos, len);4.2 串的表示和实现;一、顺序表示和实现
两种实现方式:
1、定长顺序存储表示和实现
直接使用定长的字符数组来定义
#define maxstrlen 256
typedef unsigned char sstring[maxstrlen];
sstring s; /*s是一个可容纳255个字符的顺序串*/;2、堆分配存储表示和实现
其特点是,仍以一组地址连续的存储单元存放串值字符序列,但它们的存储空间是在程序执行过程中动态分配而得。所以也称为动态存储分配的顺序表。在C语言中,利用动态存储管理函数malloc()和free() ,来根据实际需要动态分配和释放字符数组空间。这样定义的顺序串类型也有两种形式:
;(1)typedef char *string; /*c中的串库相当于此类型定义*/
(2)typedef struct{
char *ch; /*若是非空串,则按串长分配存储区,否则ch为NULL */
int length; //串长度
}hstring;;基本运算的实现:
(1)求串的长度
(2)串的清空
(3)串的赋值
(4)串的插入
(5)串联接
(6)求子串;(4)串的插入
为串S重新分配大小等于串S和串T长度之和的存储空
间,然后进行串值复制。
status subinsert(hstring s,int pos,hstring t)
//1≤pos≤StrLength(S)+1.在串S的第pos个字符之前插入串T.
; return error;
for(i=s.length-1;i=pos-1;--i)
s.ch[i+t.length]=s.ch[i]; //为插入T而腾出位置
s.ch[pos-1..pos+t.length-
2]=t.ch[0..t.length-1]; //插入T
s.length+=t.length;
}
return ok;
} ;(5)串的比较
int strcmp(hstring s,hstring t)
{
for(i=0;is.length it.length;++i)
if(s.ch[i]!=t.ch[i]
return(s.ch[i]-t.ch[i]);
return (s.length-t.length);
}
(6)串联接;status strcat(hstring t,hstring s1,hstring s2)
{
if(!(t.ch)=(char*)malloc(s1.length+s2.length)
*sizeof(char)))
exit(overflow);
//将串s1存入t中
t
文档评论(0)