



版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验四串【实验目的】1、掌握串的存储表示及基本操作;2、掌握串的两种模式匹配算法:BF 和 KMP。3、了解串的应用。【实验学时】2 学时【实验预习】回答以下问题:1、串和子串的定义串的定义:串是由零个或多个任意字符组成的有限序列。子串的定义:串中任意连续字符组成的子序列称为该串的子串。2、串的模式匹配串的模式匹配即子串定位是一种重要的串运算。设s 和 t 是给定的两个串,从主串s的第 start个字符开始查找等于子串t 的过程称为模式匹配, 如果在 S 中找到等于t 的子串,则称匹配成功,函数返回t 在 s 中首次出现的存储位置(或序号);否则,匹配失败,返回0。【实验容和要求】1、按照要求
2、完成程序exp4_1.c ,实现串的相关操作。调试并运行如下测试数据给出运行结果:求“ This is a boy”的串长;比较” abc3”和“ abcde “; 表示空格比较” english”和“ student “;比较” abc ”和“ abc “;截取串” white ”,起始2,长度 2;截取串” white ”,起始1,长度 7;截取串” white ”,起始6,长度 2;连接串” asddffgh ”和” 12344”;#include<stdio.h>#include<string.h>#define MAXSIZE 100#define ERROR
3、 0#define OK 1/* 串的定长顺序存储表示 typedef struct */char dataMAXSIZE;int length; SqString;int strInit(SqString *s);/*int strCreate(SqString *s);/*int strLength(SqString *s);/*intstrCompare(SqString*s1,SqString*s2);int subString(SqString *sub,SqString *s,int pos,int len);int strConcat(SqString *t,SqString *
4、s1,SqString *s2);/*/*/*初始化串 */生成一个串 */求串的长度 */两个串的比较*/求子串 */两个串的连接*/* 初始化串 */int strInit(SqString *s)s->length=0;s->data0='0'return OK;/*strInit*/* 生成一个串 */int strCreate(SqString *s)printf("input string :");gets(s->data);s->length=strlen(s->data);return OK;/*strCreat
5、e*/* ( 1) - 求串的长度 */int strLength(SqString *s)return s->length;/*strLength*/* ( 2) - 两个串的比较, S1>S2 返回 >0, s1<s2 返回 <0, s1=s2 返回 0*/ int strCompare(SqString *s1,SqString *s2) int i;for(i=0;i<s1->length&&i<s2->length;i+)if(s1->datai>s2->datai)return 1;if(s1-
6、>datai<s2->datai)return -1;return 0;/*strCompare*/* ( 3) - 求子串, sub 为返回的子串, pos 为子串的起始位置, len 为子串的长度 */ int subString(SqString *sub,SqString *s,int pos,int len)int i;if(pos<1|pos>s->length|len<0|len>s->length-pos+1)return ERROR;sub->length=0;for(i=0;i<len;i+)sub->
7、datai=s->datai+pos-1;sub->length+;sub->datai='0'return OK;/*subString*/* ( 4) - 两个串连接, s2 连接在 s1 后,连接后的结果串放在 t 中 */ int strConcat(SqString *t,SqString *s1,SqString *s2) int i=0,j=0;while(i<s1->length)t->datai=s1->datai;i+;while(j<s2->length)t->datai+=s2->data
8、j+;t->datai='0't->length=s1->length+s2->length;return OK;/*strConcat*/int main()int n,k,pos,len;SqString s,t,x;doprintf("n -String- n");printf(" 1. strLentghn");printf(" 2. strComparen");printf(" 3. subStringn");printf(" 4. strConcatn&
9、quot;);printf(" 0. EXITn");printf("n -String-n");printf("ninput choice:");scanf("%d",&n);getchar();switch(n)case 1:printf("n*show strLength*n");strCreate(&s);printf("strLength is %dn",strLength(&s);break;case 2:printf("n*sh
10、ow strCompare*n");strCreate(&s);strCreate(&t);k=strCompare(&s,&t); /* (5) - 调用串比较函数比较 s, t*/ if(k=0)printf("two string equal!n");else if(k<0)printf("first string<second string!n");elseprintf("first string>second string!n");break;case 3:prin
11、tf("n*show subString*n");strCreate(&s);printf("input substring pos,len:");scanf("%d,%d",&pos,&len);if(subString(&t,&s,pos,len)printf("subString is %sn",t.data);elseprintf("pos or len ERROR!n");break;case 4:printf("n*show subC
12、oncat*n");strCreate(&s);strCreate(&t);if(strConcat(&x,&s,&t) /* ( 6) - 调用串连接函数连接 s&t*/ printf("Concat string is %s",x.data);elseprintf("Concat ERROR!n");break;case 0:exit(0);default:break;while(n);return 0;2 、按照要求完成程序exp4_2.c ,实现 BF&KMP串的模式匹配算法。调试
13、及测试数据并给出结果:应用 BF 算法求子串” JING”在主串” BEIJING”中的位置, 测试起始位置分别为 1 和 5 的情况;应用 KMP算法求子串” abaabcac ”在主串” acabaabaabcacaabc ”中的位置, 测试起始位置分别为 1, 10 的情况,并写出子串的 next 值;exp4_2.c 部分代码如下:#include<stdio.h>#include<string.h>#define MAXSIZE 100#define ERROR 0#define OK 1/* 串的定长顺序存储表示*/typedef structchar da
14、taMAXSIZE;int length; SqString;int strCreate(SqString *s);int indexBf(SqString *s,SqString *t,int pos);/*void getNext(SqString *t,int next);/*KMPint indexKmp(SqString *s,SqString *t,int start,int next); /*串的模式匹配求 nextBF*/值 */串的模式匹配KMP*/* 生成一个串 */int strCreate(SqString *s)printf("input string :&
15、quot;);gets(s->data);s->length=strlen(s->data);return OK;/*strCreate*/* ( 1) - 串的模式匹配BF*/int indexBf(SqString *s,SqString *t,int pos)int i=pos-1,j=0;while(i<s->length&&j<t->length)if(s->datai=t->dataj)i+;j+;elsei=i-j+1;j=0;if(j>=t->length)return i-t->lengt
16、h+1;elsereturn 0;/*index_bf*/* ( 2) -KMP 求 next 值*/void getNext(SqString *t,int next)int i=0,j=-1;next0=-1;while(i<t->length)if(j=-1)|(t->datai=t->dataj)j+;i+;nexti=j;elsej=nextj;/*getNext*/* ( 3) -KMP 模式匹配 */int indexKmp(SqString *s,SqString *t,int start,int next)int i=start-1,j=0;while
17、(i<s->length&&j<t->length)if(j=-1|s->datai=t->dataj)i+;j+;elsej=nextj;if(j>=t->length)return i-t->length+1;elsereturn 0;/*index_kmp*/int main()int n,i,pos,nextMAXSIZE;SqString s,t;doprintf("n -String- n");printf(" 1. Index_BFn");printf(" 2.
18、 INdex_KMPn");printf(" 0. EXITn");printf("n -String-n");printf("ninput choice:");scanf("%d",&n);getchar();switch(n)case 1:printf("n*show Index_BF*n");printf(" s:");strCreate(&s);printf(" t:");strCreate(&t);printf("input st
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医疗实验室的智能管理系统设计与实施
- 医疗AI的伦理审查机制国际经验与本土实践
- 竞选小组长发言稿模版
- Axure RP 互联网产品原型设计课件 第7章 变量与表达式
- 以患者为中心用数字技术提高医院服务质量与患者满意度
- 大学生校园生活总结模版
- 司机班长年终总结工作总结模版
- 2025年第三季度年应急管理工作总结模版
- 信息安全管理在企业的核心地位
- 公众号委托代理合同范例
- 2024中国电信通信传输设备与线路维护服务采购协议3篇
- 《汽车文化》2024年课程标准(含课程思政设计)
- 空气源热泵培训资料
- T∕HGJ 12400-2021 石油化工仪表线缆选型设计标准
- 化妆品合伙协议书
- 2024年普通高等学校招生全国统一考试(新高考I卷)
- 第四届全国院校民航空中乘务专业技能大赛理论考试题库(含答案)
- 高压电力管线施工技术方案
- 骆宾王诗词课件
- JGJ162-2014建筑施工模板安全技术规范-20211102195200
- 水文自动监测数据传输规约DB41-T 1920-2019
评论
0/150
提交评论