数据结构课程设计串基本操作演示系统.docx
- 文档编号:7218773
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:24
- 大小:62.71KB
数据结构课程设计串基本操作演示系统.docx
《数据结构课程设计串基本操作演示系统.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计串基本操作演示系统.docx(24页珍藏版)》请在冰豆网上搜索。
数据结构课程设计串基本操作演示系统
附件1:
学号:
2010131328
课程设计
课程名
数据结构
题目
串基本操作演示系统
学院
计信学院
专业
计算机
班级
10级计算机三班
学生姓名
指导教师
2011
年
12
月
21
日
课程设计任务书
学生姓名:
专业班级:
2010级计算机三班
指导教师:
工作单位:
重庆工商大学
题目:
串基本操作演示系统
已知技术参数和设计要求:
基本功能要求:
实现若干串的基本操作,如串赋值、求串长、串的比较、串的替换、求子串、串的模式匹配等。
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
(1)设计的题目要求达到一定工作量,并具有一定的深度和难度,程序代码不得少于300行。
(2)对设计问题进行分析研究,运用所学知识,确定设计思路及方案,并有相应文档产生。
(3)要求设计的软件能够正确运行,达到题目要求。
(4)编写出课程设计说明书(并附程序源代码),以电子文档方式上交教师批阅。
时间安排:
2011.12.1-2011.12.3理解所设计的题目,确定初步设计方案
2011.12.4-2011.12.14编代码调试和测试
2011.12.15-2011.12.17编写设计说明书
指导教师签名:
年月日
串基本操作演示系统--课程设计说明书
重庆工商大学计算机科学与信息工程学院
摘要:
实现若干串的基本操作,如串赋值、求串长、串的比较、串的替换、求子串、串的模式匹配等。
关键字:
串,函数调用
一.基本任务
设计串基本操作演示系统,系统需要实现如下基本功能:
(1)给串赋值;
(2)判断两个串是否相等;
(3)串的复制;
(4)求串的长度;
(5)求一个串的子串;
(6)将两个串连接起来形成一个串;
(7)串的插入;
(8)串的删除;
(9)串的替换;
(10)串的比较;
(11)串的模式匹配;
(12)串的逆序输出;
二.设计概要
为了完成需求分析的基本任务,主要从以下3个方面进行设计:
2.1主界面设计
为了实现串基本操作演示系统的各个功能,定义了一个非紧缩式的顺序串,来实现串的基本操作。
2.2数据结构设计
系统采用顺序表的顺序存储结构表示和存储串的内容。
其中顺序表的结构体有2个数据项组成:
存放串字符的数组,串长。
2.3系统功能设计
系统设计了12个子功能模块,12个子功能模块的描述如下:
(1)串赋值子模块:
可以给串赋予一个字符串常量,该功能由StrAssign()函数实现。
(2)判断两个串是否相等子模块:
判断两个串是否相等,相等则返回1,否则返回0,该功能由StrEqual()函数实现。
(3)串长度子模块:
返回串中的字符个数,该功能由StrLength()函数实现。
(4)串的子串子模块:
求一个串的子串,该功能由SubStr()函数实现。
(5)串的匹配子模块:
判断两个串是否模式匹配,该功能由StrIndex()函数实现。
(6)串连接子模块:
将两个串连接起来形成一个新的串,该功能由Concat()函数实现。
(7)串替换子模块:
将一个串的某一子串用另一个串代替形成新串,该功能由RepStr()函数实现。
(8)串插入子模块:
在一个串中插入另一个串形成新串,该功能由InsStr()函数实现。
(9)串删除子模块:
将一个串的某一子串删除形成新串,该功能由DelStr()函数实现。
(10)串比较子模块:
比较两个串的大小,该功能由Strcmp()函数实现。
(11)串复制子模块:
将一个串复制给另一个串,该功能由StrCopy()函数实现。
(12)串逆序子模块:
将串逆序输出,该功能由ReverseSq()函数实现。
三.模块设计
3.1模块设计
系统主要包含主函数模块和其他子函数模块,其调用关系如图所示:
模块函数调用示意图
3.2系统子模块及其功能设计
本系统包含了12个功能子函数,各程序的函数名及功能如下:
(1)StrAssign()函数:
给串赋予一个字符串常量。
(2)StrEqual()函数:
判断两个串是否相等,相等则返回1,否则返0。
(3)StrLength()函数:
返回串中的字符个数。
(4)SubStr()函数:
求一个串的子串。
(5)StrIndex()函数:
判断两个串是否模式匹配。
(6)Concat()函数:
将两个串连接起来形成一个新的串。
(7)RepStr()函数:
将一个串的某一子串用另一个串代替形成新串。
(8)InsStr()函数:
在一个串中插入另一个串形成新串。
(9)DelStr()函数:
将一个串的某一子串删除形成新串。
(10)Strcmp()函数:
比较两个串的大小。
(11)StrCopy()函数:
将一个串复制给另一个串。
(12)ReverseSq()函数:
将串逆序输出。
四.详细设计
4.1数据结构设计
系统采用顺序表的顺序存储结构存储串的信息,其结构体类型定义如下:
#defineMaxSize100
typedefstruct
{
chardata[MaxSize];//存放串字符
intlen;//串长
}SqString;
4.2系统主要模块设计
(1)主函数:
main()函数,在其里面调用各个功能函数,以实现他们的功能,算法如下:
intmain()
{
inti,j,m,n;
SqStringstr1,str2,s1,s2,s3,s4,s5;
charcstr1[80],cstr2[80];
printf("Enterastring1:
");//提示用户输入字符串
i=0;
while((cstr1[i]=getchar())!
='\n')
i++;
cstr1[i]='\0';
printf("Enterastring2:
");
j=0;
while((cstr2[j]=getchar())!
='\n')
j++;
cstr2[j]='\0';
//1串的赋值
printf("()串的赋值\n");
StrAssign(str1,cstr1);
StrAssign(str2,cstr2);
printf("str1=");
DispStr(str1);
printf("str2=");
DispStr(str2);
//2判断两个串是否相等
printf("
(2)判断串str1和str2是否相等:
\n");
m=StrEqual(str1,str2);
if(m==0)
printf("str1与str2不相等!
\n");
else
printf("str1与str2相等!
\n");
//3串的长度
printf("()串的长度\n");
printf("str1的长度为:
%d\n",StrLength(str1));
printf("str2的长度为:
%d\n",StrLength(str2));
//4求串的子串
printf("()串的子串:
\n");
printf("提取串str1的第个字符开始的个字符而产生串s1\n");
s1=SubStr(str1,2,3);
DispStr(s1);
//5串的匹配
printf("()串的匹配\n");
if(StrIndex(str1,str2)!
=-1)
printf("匹配成功!
\n");
else
printf("匹配失败!
\n");
printf("\n");
//6串的连接
printf("()串的连接\n");
printf("将串str1和串str2连接起来形成串s2:
\n");
s2=Concat(str1,str2);
DispStr(s2);
//7串的替换
printf("()串的替换\n");
printf("在串str1中,将第个字符开始的个字符构成的子串用str2替换,形成s3:
\n");
s3=RepStr(str1,3,4,str2);
DispStr(s3);
//8串的插入
printf("()将串str2插入到串str1的第个字符中,形成串s4:
\n");
s4=InsStr(str1,2,str2);
DispStr(s4);
//9串的删除
printf("(9)从串str1中删去第个字符开始的长度为的子串,形成串s5:
\n");
s5=DelStr(str1,2,3);
DispStr(s5);
//10串的比较
printf("(10)串的比较:
\n");
n=Strcmp(str1,str2);
if(n==0)
printf("str1=str2\n");
elseif(n==1)
printf("str1>str2\n");
else
printf("str1 //11串的复制 printf("(11)串的复制\n"); StrCopy(str1,str2); printf("复制后的str1为: "); DispStr(str1); //12串逆序 printf("(12)将串str1逆序输出: \n"); ReverseSq(str1); DispStr(str1); return0; } (2)各个功能函数及其算法实现: 实现串赋值的函数: voidStrAssign(SqString&s,charcstr[]) { inti; for(i=0;cstr[i]! ='\0';i++) s.data[i]=cstr[i]; s.len=i; } 判断串是否相等的函数: intStrEqual(SqStrings,SqStringt) { intsame=1,i; if(s.len! =t.len)//长度不相等时返回 same=0; else for(i=0;i if(s.data[i]! =t.data[i])//有一个对应字符不相同时返回 same=0; } returnsame; } 实现串复制的函数: voidStrCopy(SqString&s,SqStringt) { inti; for(i=0;i s.data[i]=t.data[i]; s.len=t.len; } 求串长的函数: intStrLength(SqStrings) { returns.len; } 求子串的函数: SqStringSubStr(SqStrings,inti,intj) { SqStringstr; intk; str.len=0; if(i<=0||i>s.len||j<0||i+j-1>s.len) returnstr;//参数不正确时返回空串 for(k=i-1;k str.data[k-i+1]=s.data[k]; str.len=j; returnstr; } 串的匹配查询的函数: intStrIndex(SqStrings,SqStringt)//s为主串,t为模式串 { inti=0,j=0; while(i { if(s.data[i]==t.data[j])//主串与模式串逐一匹配 { i++; j++; } else//否则,回溯重新开始下一次匹配 { i=i-j+1;//主串从下一个位置开始 j=0;//模式串从头开始 } } if(j>=t.len)//如果匹配成功 return(i-t.len);//返回主串第一个下标 else return-1;//匹配失败,返回-1 } 实现串连接的函数 SqStringConcat(SqStrings,SqStringt) { SqStringstr; inti; str.len=s.len+t.len; for(i=0;i str.data[i]=s.data[i]; for(i=0;i str.data[s.len+i]=t.data[i]; returnstr; } 实现串替换的函数: SqStringRepStr(SqStrings,inti,intj,SqStringt) { intk; SqStringstr; str.len=0; if(i<=0||i>s.len||i+j-1>s.len)//参数不正确时返回空串 returnstr; for(k=0;k str.data[k]=s.data[k]; for(k=0;k str.data[i+k-1]=t.data[k]; for(k=i+j-1;k str.data[t.len+k-j]=s.data[k]; str.len=s.len-j+t.len; returnstr; } 实现串的插入的函数: SqStringInsStr(SqStrings1,inti,SqStrings2) { intj; SqStringstr; str.len=0; if(i<=0||i>s1.len+1)//参数不正确时返回空串 returnstr; for(j=0;j str.data[j]=s1.data[j]; for(j=0;j str.data[i+j-1]=s2.data[j]; for(j=i-1;j str.data[s2.len+j]=s1.data[j]; str.len=s1.len+s2.len; returnstr; } 实现串的删除的函数: SqStringDelStr(SqStrings,inti,intj) { intk; SqStringstr; str.len=0; if(i<=0||i>s.len||i+j>s.len+1)//参数不正确时返回空串 { printf("参数不正确\n"); returnstr; } for(k=0;k str.data[k]=s.data[k]; for(k=i+j-1;k str.data[k-j]=s.data[k]; str.len=s.len-j; returnstr; } 实现串的比较的函数: intStrcmp(SqStrings,SqStringt) { inti,comlen; if(s.len comlen=s.len;//求s和t的共同长度 else comlen=t.len; for(i=0;i if(s.data[i] return-1; elseif(s.data[i]>t.data[i]) return1; } if(s.len==t.len) return0;//s==t elseif(s.len return-1;//s else return1;//s>t } 实现串逆序输出的函数: voidReverseSq(SqString&str) { inti,j; chart; i=0; j=str.len-1;//首尾调换 while(i { t=str.data[i]; str.data[i]=str.data[j]; str.data[j]=t; i++; j--; } } 五.调试分析 系统运行结果如下: 六.用户使用说明 用户可任意输入两个串,系统将会自动对这两个串进行比较,复制,判断是否相等,删除,插入,替换等一系列串的基本操作。 七.参考文献 (1)数据结构教程清华大学出版社2009年3月第3版 (2)C语言程序设计高等教育出版社2008年1月第1版 (3)数据结构教程上机实验指导清华大学出版社 (4)数据结构(C语言)实践教程西安电子科技大学出版社 八.对所设计的软件进行自我评价 这个软件所运用了这学期所学的数据结构编写,在要求实现的功能上另外加了功能,如串的插入,删除,连接,逆序输出等。 让这个软件的编写方式不仅仅局限于常规的编程思想上。 没有未解决的问题。 此软件能够正确运行并得到正确结果。 创新点应该在于扩大了软件的功能。 九.程序源代码 #include #include #include //定义顺序串 #defineMaxSize100 typedefstruct { chardata[MaxSize];//存放串字符 intlen;//串长 }SqString; //串赋值 voidStrAssign(SqString&s,charcstr[]) { inti; for(i=0;cstr[i]! ='\0';i++) s.data[i]=cstr[i]; s.len=i; } //判断串是否相等 intStrEqual(SqStrings,SqStringt) { intsame=1,i; if(s.len! =t.len)//长度不相等时返回 same=0; else { for(i=0;i if(s.data[i]! =t.data[i])//有一个对应字符不相同时返回 same=0; } returnsame; } //将串t复制给串s voidStrCopy(SqString&s,SqStringt) { inti; for(i=0;i s.data[i]=t.data[i]; s.len=t.len; } //求串长 intStrLength(SqStrings) { returns.len; } //求子串 SqStringSubStr(SqStrings,inti,intj) { SqStringstr; intk; str.len=0; if(i<=0||i>s.len||j<0||i+j-1>s.len) returnstr;//参数不正确时返回空串 for(k=i-1;k str.data[k-i+1]=s.data[k]; str.len=j; returnstr; } //串的匹配查询(顺序串) intStrIndex(SqStrings,SqStringt)//s为主串,t为模式串 { inti=0,j=0; while(i { if(s.data[i]==t.data[j])//主串与模式串逐一匹配 { i++; j++; } else//否则,回溯重新开始下一次匹配 { i=i-j+1;//主串从下一个位置开始 j=0;//模式串从头开始 } } if(j>=t.len)//如果匹配成功 return(i-t.len);//返回主串第一个下标 else return-1;//匹配失败,返回-1 } //串的连接: 返回由两个串连接在一起的新串 SqStringConcat(SqStrings,SqStringt) { SqStringstr; inti; str.len=s.len+t.len; for(i=0;i str.data[i]=s.data[i]; for(i=0;i str.data[s.len+i]=t.data[i]; returnstr; } //串的替换 SqStringRepStr(SqStrings,inti,intj,SqStringt) { intk; SqStringstr; str.len=0; if(i<=0||i>s.len||i+j-1>s.len)//参数不正确时返回空串 returnstr; for(k=0;k str.data[k]=s.data[k]; for(k=0;k str.data[i+k-1]=t.data[k]; for(k=i+j-1;k str.data[t.len+k-j]=s.data[k]; str.len=s.len-j+t.len; returnstr; } //插入串: 将串s2插入到串s1的第i个字符中 SqStringInsStr(SqStrings1,inti,SqStrings2) { intj; SqStringstr; str.len=0; if(i<=0||i>s1.len+1)//参数不正确时返回空串 returnstr; for(j=0;j
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 基本 操作 演示 系统