数据结构实验四字符串的应用
更新时间:2023-11-26 02:41:01 阅读量: 教育文库 文档下载
第四章 字符串的应用
【实验目的】
1. 熟练掌握字符串的数据类型定义以及字符串的五种基本操作的定义,并能利用这些基本操作实现字符串的其他基本操作的方法。
2. 熟练掌握字符串串的定长顺序存储结构上实现字符串的各种操作的方法。 3. 理解字符串的堆分配存储表示以及在其上实现字符串操作的基本方法。
4. 熟练掌握串的基本操作类型的实现方法,其中文本模式匹配方法是一个难点,在掌握了BF算法的基础上理解改进的KMP算法。
5. 了解一般文字处理软件的设计方法。
第一节 知识准备
一、 有关串几个重要概念
1. 串(字符串):零个或多个字符组成的有限序列。一般记作s=\?an\ 2. 长度:串中字符的数目
3. 空串:零个字符的串,其长度为零
4. 子串和主串:串中任意个连续的字符组成的子序列称为该串的子串;包含子串的串相应地称为主串,字符在序列中的序号为该字符在串中的位置。
5. 当两个串的长度相等,并且各个对应位置的字符都相等时称为两串相等。 6. 空格串:由一个或多个空格组成的串‘ ’,同空串是完全不同的。
二、 串的抽象数据类型定义 ADT String{
数据对象:D={ | ∈CharacterSet, i=1,2,...,n, n>=0} 数据关系:R1={< , >| , ∈D, i=2,...,n} 基本操作:
Assign(&s,t) 将串t的值赋给串 s Create(&s,ss) 将串s的值设定为字符序列ss Equal(s,t) 判定串s和串t是否相等 Length(s) 求串s的长度
Concat(&s,t) 将串s和串t连接成一个串,结果存于s中
Substr(&sub,s,start,len) 从s的第start个字符起,取长为len的子串存于sub Index(s,t) 求子串t在主串s中第一次出现的位置 Replace(&s,t,v) 以串v替换串s中的所有的非空子串t Insert(&s,pos,t) 在串s的第pos个字符之前插入串t;
Delete(&s,pos,len) 从串s中删去从第pos个字符起长度为len的子串; } ADT String 三、 串的存储结构 1. 定长顺序存储表示
用一组地址连续的存储单元来存放字符序列,并约定该结构能存放字符的个数。 #define MAXLEN 字符最大个数 typedef struct {int len;
char ch[MAXLEN]; } SString; 2. 堆分配存储表示
系统先分配一个容量很大的地址连续的存储空间作为字符串的存放空间,每建立一个新串,系统从该空间中分配一个大小和串长相同的空间来存放新串。 typedef Struct { char *ch ; //存储空间基址 int length; //串的长度 }Hstring;
3. 串的块链存储表示
用链表形式来存储串,如果以串中每一个字符作为一个结点,使得相应的存储占用量增大,因此可采用将多个字符作为一个结点的形式来形成链表(即块链形式) #define MAX 80 //用户定义块的大小 typedef struct str {char ch[MAX]; struct str *next; }Chunk;
typedef struct string { Chunk *head,*tail; int length; }LString
在串的处理操作中,我们可视不同的情况进行选择使用不同的定义形式,当对字符串进行连接,删除等操作时,采用链结构更为方便上些,但采用链结构在进行串的截取(求子串)等操作时则比采用静态结构效率更低。
第二节 串的基本操作示例
【问题描述】用C语言实现串的一些基本操作算法。 【数据描述】
采用静态存储结构来表示串,用一维字符数组来存放字符序列,用整数len来表示当前串实际长度。 #define STRINGMAX 81 //串最多存放字符的个数 struct string {int len;
char ch[STRINGMAX]; };
typedef struct string STRING; 【C源程序】
本程序只设计了串的创建,联接,求子串和删除操作,其余各基本操作可在本程序基础上进行改进,补充。
#include \ #include \ #define STRINGMAX 81
#define LEN sizeof(struct string)/* 串的定义*/ struct string {int len;
char ch[STRINGMAX]; };
typedef struct string STRING;
void creat(STRING *s); void print(STRING *s);
void concat(STRING *s,STRING *t);
STRING *substr(STRING *s,int start,int len); void delete(STRING *s,int start,int len); main()
{STRING *s,*t,*v; /*定义三个采用静态存储形式的串*/ int start,len; int position;
t=(STRING *)malloc(LEN); /*为三个串分配相应的存储空间*/ s=(STRING *)malloc(LEN); v=(STRING *)malloc(LEN);
printf(\创建S串*/ creat(s);
printf(\创建T串*/ creat(t);
concat(s,t); /* 连接并输出相应的串*/ printf(\ print(s);
printf(\输入截取子串的起始位置*/ scanf(\
printf(\输入截取子串的长度*/ scanf(\
v=substr(s,start,len); /*截取子串*/ printf(“the substring :”); print(v);
printf(\输入删除串的起始位置*/ scanf(\
printf(\输入删除串的长度*/ scanf(\
delete(s,start,len); /*删除串*/ printf(\ print(s); }
void delete(STRING *s,int start,int len) {
int i;
if (start<=s->len&&len>=0&&start+len<=s->len)/*删除操作合法性验证*/ {for(i=start+len;i<=s->len;i++) /*从start位置开始移动元素*/ s->ch[i-len]=s->ch[i];
s->len=s->len-len; /*置新的长度*/ } else
printf(\ }
STRING *substr(STRING *s,int start,int len) {int i; STRING *t;
t=(STRING *)malloc(LEN);
if (start<0&&start>=s->len) /*取子串的合法性验证*/ return(NULL); else
if (len>=1&&len<=s->len-start)
{ for(i=0;i
t->len=len; /*置子串长度*/ t->ch[i]='\\0'; return(t); } else
正在阅读:
数据结构实验四字符串的应用11-26
新人教版 八年级物理下册第七章《力》单元测试题及答案02-28
政府救市02-26
时间序列测验2解答 北师珠 时间序列04-17
中国建筑史答案06-05
用友ERP认证(应收应付)复习题03-06
JavaScript习题11-09
关于刑事责任年龄下限问题的感想05-15
《金陵塔碑文》刘伯温预言06-03
英语阅读课教学案例与分析10-10
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 数据结构
- 字符串
- 实验
- 应用
- 手工活动剪贴画教案
- 2019年整理--房地产销售员工自我评价
- 2019-2020学年高中数学 第一章 三角函数测试题(含解析)新人教A版必修4.doc
- 人教版高中语文必修二第4单元第13课《在马克思墓前的讲话》教案2完美版
- 党建工作会议主持词
- 2013年教师用书课下作业:Unit2 Section 语法讲座 专题练习
- 《湖南省建设工程计价办法》交底资料(2006) - 图文
- 三种肺炎支原体检测法的临床应用分1 - 精品资料
- 粮食安全与植物保护
- 个人实习工作第一周周总结报告
- 政府工作报告-在宝应县安宜镇第三届人民代表大会第三次会议上
- 探索马铃薯沉浮的原因教案
- 电工电子技术( 第2次)
- 初中语文知识点《基础知识及语言表达》《字义》课时练习(含答案考点及解析)
- 我国房地产行业概况
- 三年级数学日记大全
- 徐长文传
- 哈尔滨工业大学C语言2016年MOOC在线测试答案(DOC)
- 矿物、岩石薄片鉴定实习报告
- 早餐 - 图文