数据结构实验5串子系统精编版.docx

上传人:b****1 文档编号:15105329 上传时间:2023-06-30 格式:DOCX 页数:14 大小:197.69KB
下载 相关 举报
数据结构实验5串子系统精编版.docx_第1页
第1页 / 共14页
数据结构实验5串子系统精编版.docx_第2页
第2页 / 共14页
数据结构实验5串子系统精编版.docx_第3页
第3页 / 共14页
数据结构实验5串子系统精编版.docx_第4页
第4页 / 共14页
数据结构实验5串子系统精编版.docx_第5页
第5页 / 共14页
数据结构实验5串子系统精编版.docx_第6页
第6页 / 共14页
数据结构实验5串子系统精编版.docx_第7页
第7页 / 共14页
数据结构实验5串子系统精编版.docx_第8页
第8页 / 共14页
数据结构实验5串子系统精编版.docx_第9页
第9页 / 共14页
数据结构实验5串子系统精编版.docx_第10页
第10页 / 共14页
数据结构实验5串子系统精编版.docx_第11页
第11页 / 共14页
数据结构实验5串子系统精编版.docx_第12页
第12页 / 共14页
数据结构实验5串子系统精编版.docx_第13页
第13页 / 共14页
数据结构实验5串子系统精编版.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数据结构实验5串子系统精编版.docx

《数据结构实验5串子系统精编版.docx》由会员分享,可在线阅读,更多相关《数据结构实验5串子系统精编版.docx(14页珍藏版)》请在冰点文库上搜索。

数据结构实验5串子系统精编版.docx

数据结构实验5串子系统精编版

验证性实验5:

串子系统

班级学号012301114114姓名胡德文

1.实验目的

(1)掌握串的特点及顺序定长存储的方式。

(2)掌握串的创建、连接、插入、删除、显示等操作。

(3)掌握串的查找、取子字符串、比较串大小的操作

(4)掌握模式匹配的基本思想及其算法。

2.实验内容

(1)由用户通过键盘输入建立一个字符串。

(2)编写插入、删除、查找、比较、取子字符串、连接字符串、显示、模式匹配等程序。

(3)设计一个选择式菜单,以菜单方式选择上述操作。

串子系统

********************************************

*1------输入字串*

*2------连接字串*

*3------取出子串*

*4------删除子串*

*5------插入子串*

*6------查找子串*

*7------比较串大小*

*8------显示字串*

*0------返回*

********************************************

请输入菜单选项(0--8):

3.实验程序

#include

#defineSTRINGMAX100

typedefstruct

{charvec[STRINGMAX];

intlen;

}str;

voidConcatStr(str*r1,str*r2)

{inti;

printf("\n\t\tr1=%sr2=%s\n",r1->vec,r2->vec);

if(r1->len+r2->len>STRINGMAX)

printf("\n\n\t两个串太长,溢出!

\n");

else

{for(i=0;ilen;i++)

r1->vec[r1->len+i]=r2->vec[i];

r1->vec[r1->len+i]='0';

r1->len=r1->len+r2->len;

}

}

voidSubStr(str*r,inti,intj)

{intk;

stra;

str*r1=&a;

if(i+j-1>r->len)

{printf("\n\t\t子串超界!

\n");

return;

}

else

{for(k=0;k

r1->vec[k]=r->vec[i+k-1];

r1->len=j;

r1->vec[r1->len]='\0';

}

printf("\n\t\t取出字符为:

");

puts(r1->vec);

}

voidDelStr(str*r,inti,intj)

{intk;

if(i+j-1>r->len)

printf("\n\t\t所要删除的子串超界!

\n");

else

{for(k=i+j;klen;k++,i++)

r->vec[i]=r->vec[k];

r->len=r->len-j;

r->vec[r->len]='\0';

}

}

str*InsStr(str*r,str*r1,inti)

{intk;

if(i>=r->len||r->len+r1->len>STRINGMAX)

printf("\n\t\t不能插入!

\n");

else

{for(k=r->len-1;k>=i;k--)

r->vec[r1->len+k]=r->vec[k];

for(k=0;klen;k++)

r->vec[i+k]=r1->vec[k];

r->len=r->len+r1->len;

r->vec[r->len]='\0';

}

returnr;

}

intIndexStr(str*r,str*r1)

{inti,j,k;

for(i=0;r->vec[i];i++)

for(j=i,k=0;r->vec[j]==r1->vec[k];j++,k++)

if(!

r1->vec[k+1])

returni;

return-1;

}

intLenStr(str*r)

{inti=0;

while(r->vec[i]!

='\0')

i++;

returni;

}

str*CreateStr(str*r)

{gets(r->vec);

r->len=LenStr(r);

returnr;

}

intEqualStr(str*r1,str*r2)

{for(inti=0;r1->vec[i]&&r2->vec[i]&&r1->vec[i]==r2->vec[i];i++);

returnr1->vec[i]-r2->vec[i];

}

voidmain()

{stra,b,c,d;

str*r=&a,*r1;

r->vec[0]='\0';

charchoice,p;

inti,j,ch=1;

while(ch!

=0)

{

printf("\n");

printf("\n\t\t串子系统");

printf("\n\t\t*********************************************");

printf("\n\t\t*1------输入字串*");

printf("\n\t\t*2------连接字串*");

printf("\n\t\t*3------取出子串*");

printf("\n\t\t*4------删除子串*");

printf("\n\t\t*5------插入子串*");

printf("\n\t\t*6------查找子串*");

printf("\n\t\t*7------比较串大小*");

printf("\n\t\t*8------显示字串*");

printf("\n\t\t*0------返回*");

printf("\n\t\t*********************************************");

printf("\n\t\t请选择菜单号(0--8):

");

scanf("%c",&choice);

getchar();

if(choice=='1')

{printf("\n\t\t请输入一个字符串:

");

gets(r->vec);

r->len=LenStr(r);

}

elseif(choice=='2')

{printf("\n\t\t请输入所要连接的串:

");

r1=CreateStr(&b);

ConcatStr(r,r1);

printf("\n\t\t连接以后的新串值为:

");

puts(r->vec);

}

elseif(choice=='3')

{printf("\n\t\t请输入从第几个字符开始:

");

scanf("%d",&i);getchar();

printf("\n\t\t请输入取出的连续字符数:

");

scanf("%d",&j);

getchar();

SubStr(r,i,j);

}

elseif(choice=='4')

{printf("\n\t\t请输入从第几个字符开始:

");

scanf("%d",&i);getchar();

printf("\n\t\t请输入删除的连续字符数:

");

scanf("%d",&j);

getchar();

DelStr(r,i-1,j);

}

elseif(choice=='5')

{

printf("\n\t\t请输入在第几个字符前插入:

");

scanf("%d",&i);

getchar();

printf("\n\t\t请输入所要插入的字符串:

");

r1=CreateStr(&b);

InsStr(r,r1,i-1);

}

elseif(choice=='6')

{

printf("\n\t\t请输入所要查找的字符串:

");

r1=CreateStr(&b);

i=IndexStr(r,r1);

if(i!

=-1)

printf("\n\t\t第一次出现的位置是第%d个.\n",i+1);

else

printf("\n\t\t该字串不在其中!

\n");

}

elseif(choice=='7')

{

printf("\n\t\t请输入第一个串:

");

gets(c.vec);

printf("\n\t\t请输入第二个串:

");

gets(d.vec);

intk=EqualStr(&c,&d);

if(k>0)

printf("\n\t\t第一个串大!

\n");

elseif(k<0)

printf("\n\t\t第二个串大!

\n");

else

printf("\n\t\t两个串一样大!

\n");

}

elseif(choice=='8')

{printf("\n\t\t该串值为:

");

if(r->vec[0]=='\0')

printf("空!

\n");

else

puts(r->vec);

}

elseif(choice=='0')

break;

else

printf("\n\t\t请注意:

输入有误!

\n");

if(choice!

='X'&&choice!

='X')

{printf("\n\t\t按【Enter】键继续,按任意键返回主菜单.");

p=getchar();

if(p!

='\xA')

{getchar();break;}

}

}

}

4.程序运行

5.实验小结

本章要求我们掌握的是字符串的创建、连接、删除、显示、查找、取子串和比较字符串大小。

串的本质就是一种特殊的线性表,而它的数据元素是由一个个字符组成的。

串的存储方式分为紧凑型和非紧凑型两种,同时也了解了两种字符串的不同之处。

在这一章的学习中了解了很多知识,增加了见解,拓宽了视野。

在输入源代码的过程中巩固了串的运算,增强了记忆,在编译的过程中难免有错误,不过也正是这些错误将我不理解的地方都暴露出来了,让我可以知道自己的弱点,可以加强对知识的理解。

这也是每次实验的目的。

所以,总的来说,本次实验还是成功的。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2