教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 专业资料 >

数据结构实验5:串子系统

来源:网络收集 时间:2026-10-01
导读: 验证性实验5:串子系统 班级学号 20 姓名 施程程 1.实验目的 (1)掌握串的特点及顺序定长存储的方式。 (2)掌握串的创建、连接、插入、删除、显示等操作。 (3)掌握串的查找、取子字符串、比较串大小的操作 (4)掌握模式匹配的基本思想及其算法。 2.实

验证性实验5:串子系统

班级学号 20 姓名 施程程

1.实验目的

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

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

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

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

2.实验内容

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

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

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

串 子 系 统

******************************************** * 1------输 入 字 串 * * 2------连 接 字 串 * * 3------取 出 子 串 * * 4------删 除 子 串 * * 5------插 入 子 串 * * 6------查 找 子 串 * * 7------比 较 串 大 小 * * 8------显 示 字 串 * * 0------返 回 * ********************************************

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

3.实验程序

#include <stdio.h>

#define STRINGMAX 100

typedef struct

{ char vec [STRINGMAX];

int len;

}str;

void ConcatStr(str *r1,str *r2)

{ int i;

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

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

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

else

{ for (i=0;i<r2->len;i++)

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

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

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

}

}

void SubStr(str *r,int i,int j)

{ int k;

str a;

str *r1=&a;

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

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

return;

}

else

{for (k=0;k<j;k++)

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

r1->len=j;

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

}

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

puts(r1->vec);

}

void DelStr(str *r,int i,int j)

{int k;

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

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

else

{for (k=i+j;k<r->len;k++,i++)

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

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

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

}

}

str *InsStr(str *r,str *r1,int i)

{int k;

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;k<r1->len;k++)

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

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

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

}

return r;

}

int IndexStr(str *r,str *r1)

{int i,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])

return i;

return -1;

}

int LenStr(str *r)

{int i=0;

while(r->vec[i]!='\0')

i++;

return i;

}

str*CreateStr(str *r)

{ gets(r->vec);

r->len=LenStr(r);

return r;

}

int EqualStr(str *r1,str *r2)

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

return r1->vec[i]-r2->vec[i];

}

void main()

{str a,b,c,d;

str *r=&a,*r1;

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

char choice,p;

int i,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);

}

else if(choice=='2')

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

r1=CreateStr(&b);

ConcatStr(r,r1);

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

puts(r->vec);

}

else if(choice=='3')

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

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

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

scanf("%d",&j);

getchar();

SubStr(r,i,j);

}

else if(choice=='4')

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

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

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

scanf("%d",&j);

getchar();

DelStr(r,i-1,j);

}

else if(choice=='5')

{

printf("\n\t\t 请输入在第几个字符前插入: "); scanf("%d",&i); getchar(); printf("\n\t\t 请输入所要插入的字符串: "); r1=CreateStr(&b); InsStr(r,r1,i-1);

}

else if(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");

…… 此处隐藏:2224字,全部文档内容请下载后查看。喜欢就下载吧 ……

数据结构实验5:串子系统.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/1759004.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150份
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150份
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)