实验日期2010.5.10 教师签字成绩 【实验名称】第四章串的基本操作及应用【实验目的】1、 熟悉将算法转换成程序代码的过程2、 了解串的逻辑结构特性,熟练掌握串顺序存储结构的C语言描述 方法3、熟练掌握串的基本操作:求长度、串的连接、插入、删除等,掌握串的存取特性实验原理】1. 申可以可以有三种存储方式,分别为顺序存储、堆分配存储、链式存储,串的基木操作在这三种存储方式下操作2. 串的模式匹配KMP算法在每一趟匹配过程中出现字符不等时,不 需回溯指针,而是利用已经得到的部分匹配结果的结果将模式向 右滑动尽可能远的一段距离,继续进行比较实验内容】1. 串的顺序存储表示及基本操作(插入、删除、求串长、合并 连接串.求子串.串比较等)#include#include#include#include#define SIZE 20struct HString{char ch[SIZE];int length;};void StrInsert(HString &s,int pos,HString t){int i,j;if(pos< lllpos>s.length-!-1 )coutnERROR!if(t.length){for(i=s.length-1 ;i>=pos-li)s.ch[i+t.length]=s.ch[i];for(j=0;j<=t.length-1 ;j++)s. ch[pos-l+j]=t.ch[j];s.length+=t.length;}}void StrDelete(HString &s,int pos.int len){int i;int v=pos-l;if(pos< lllpos>s.lengthlllen<0lllen>s.length-pos4-1 )coutrERROR!"; for(i=pos+len-1 ;i<=s.length-1 ;i++)s.ch[v++]=s.ch[i];s.length-=len;}void StrAssign(HString &t,char chars[]){int i;char *c;for(i=0,c=chars;*c;++i,++c);{t」ength=0;}else{for(intj=0;js.lengthlllens.length-pos+l) {cout"ERROR! "endl;return 0;}if(!len){sub」ength=0;}else{int i=len;for(i=0;i0) cout"串 s 大丁•串 t"endl; else if(value==O) coutn串 s 等于串 t"endl; else coutn串 s 小于串 t"endl;coutendl;break;}case 6:HString s;char *chars;int val;coutH请输入串s:”; cins.ch;StrAssign(s,s.ch); val=StrLen(s);coutH 串的氏度为:nvalendl;break;case 7:cout"操作结束!"endl;break; default:cout"输入错误!请重新输入! "endl;break;}}while(i!=7);}2. 串的堆分配存储表示及基本操作(插入、删除、求串长、合并连接串、求子串、串比较等)#include#include#include#includestruct HString{char *ch;int length;};void StrInsert(HString &s,int pos,HString t){int i,j;if(pos< lllpos>s.length+ l)cout"ERROR! ”;if(t.length){s.ch=(char*)realloc(s.ch,(s.length+匚 length )* sizeof(char)); for(i=s.length-1 ;i>=pos-li)s.ch[i+t.length]=s.ch[i];for(j=0;j<=t.length-1 ;j++)s.ch[pos-l+j]=t.ch[j];s.length+=t.length;}}void StrDelete(HString &s,int pos.int len){int i;int v=pos-l;if(poss.lengthlllens.length-pos+l)coutnERROR!u; for(i=pos+len-1 ;i<=s.length-1 ;i++)s. ch[v++]=s.ch[i];s.length ■二 len;}void StrAssign(HString &t,char *chars){int i;char *c;for(i=0,c=chars; *c ;++i,++c);if(!i){t. ch=NULL;t.length=0;}else{t.ch=(char *)malloc(i*sizeof(char));for(intj=0;j