数据结构课程设计串基本操作演示系统Word文件下载.docx
- 文档编号:20322275
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:24
- 大小:62.71KB
数据结构课程设计串基本操作演示系统Word文件下载.docx
《数据结构课程设计串基本操作演示系统Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计串基本操作演示系统Word文件下载.docx(24页珍藏版)》请在冰豆网上搜索。
时间安排:
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'
;
Enterastring2:
j=0;
while((cstr2[j]=getchar())!
j++;
cstr2[j]='
//1串的赋值
()串的赋值\n"
StrAssign(str1,cstr1);
StrAssign(str2,cstr2);
str1="
DispStr(str1);
str2="
DispStr(str2);
//2判断两个串是否相等
(2)判断串str1和str2是否相等:
\n"
m=StrEqual(str1,str2);
if(m==0)
printf("
str1与str2不相等!
else
str1与str2相等!
//3串的长度
()串的长度\n"
str1的长度为:
%d\n"
StrLength(str1));
str2的长度为:
StrLength(str2));
//4求串的子串
()串的子串:
提取串str1的第个字符开始的个字符而产生串s1\n"
s1=SubStr(str1,2,3);
DispStr(s1);
//5串的匹配
()串的匹配\n"
if(StrIndex(str1,str2)!
=-1)
匹配成功!
匹配失败!
//6串的连接
()串的连接\n"
将串str1和串str2连接起来形成串s2:
s2=Concat(str1,str2);
DispStr(s2);
//7串的替换
()串的替换\n"
在串str1中,将第个字符开始的个字符构成的子串用str2替换,形成s3:
s3=RepStr(str1,3,4,str2);
DispStr(s3);
//8串的插入
()将串str2插入到串str1的第个字符中,形成串s4:
s4=InsStr(str1,2,str2);
DispStr(s4);
//9串的删除
(9)从串str1中删去第个字符开始的长度为的子串,形成串s5:
s5=DelStr(str1,2,3);
DispStr(s5);
//10串的比较
(10)串的比较:
n=Strcmp(str1,str2);
if(n==0)
str1=str2\n"
elseif(n==1)
str1>
str2\n"
str1<
//11串的复制
(11)串的复制\n"
StrCopy(str1,str2);
复制后的str1为:
//12串逆序
(12)将串str1逆序输出:
ReverseSq(str1);
return0;
}
(2)各个功能函数及其算法实现:
实现串赋值的函数:
voidStrAssign(SqString&
s,charcstr[])
inti;
for(i=0;
cstr[i]!
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<
s.len;
if(s.data[i]!
=t.data[i])//有一个对应字符不相同时返回
}
returnsame;
实现串复制的函数:
voidStrCopy(SqString&
s,SqStringt)
t.len;
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<
i+j-1;
k++)//将s.data[i..i+j]复制到str
str.data[k-i+1]=s.data[k];
str.len=j;
returnstr;
串的匹配查询的函数:
intStrIndex(SqStrings,SqStringt)//s为主串,t为模式串
inti=0,j=0;
while(i<
s.len&
&
j<
t.len)//是否到末尾
{
if(s.data[i]==t.data[j])//主串与模式串逐一匹配
{
i++;
j++;
}
else//否则,回溯重新开始下一次匹配
i=i-j+1;
//主串从下一个位置开始
j=0;
//模式串从头开始
if(j>
=t.len)//如果匹配成功
return(i-t.len);
//返回主串第一个下标
return-1;
//匹配失败,返回-1
实现串连接的函数
SqStringConcat(SqStrings,SqStringt)
str.len=s.len+t.len;
i++)//将s复制到str
str.data[i]=s.data[i];
i++)//将t复制到str
str.data[s.len+i]=t.data[i];
实现串替换的函数:
SqStringRepStr(SqStrings,inti,intj,SqStringt)
s.len||i+j-1>
s.len)//参数不正确时返回空串
for(k=0;
i-1;
k++)//将s.data[0..i-2]复制到str
str.data[k]=s.data[k];
k++)//将t复制到str
str.data[i+k-1]=t.data[k];
for(k=i+j-1;
k++)//将s.data[i+j-1..s.len-1]复制到str
str.data[t.len+k-j]=s.data[k];
str.len=s.len-j+t.len;
实现串的插入的函数:
SqStringInsStr(SqStrings1,inti,SqStrings2)
intj;
s1.len+1)//参数不正确时返回空串
for(j=0;
j++)//将s1.data[0..i-2]复制到str
str.data[j]=s1.data[j];
s2.len;
j++)//将s2复制到str
str.data[i+j-1]=s2.data[j];
for(j=i-1;
s1.len;
j++)//将s1.data[i-1..s1.len-1]复制到str
str.data[s2.len+j]=s1.data[j];
str.len=s1.len+s2.len;
实现串的删除的函数:
SqStringDelStr(SqStrings,inti,intj)
if(i<
=0||i>
s.len||i+j>
s.len+1)//参数不正确时返回空串
参数不正确\n"
for(k=0;
k++)//将s.data[0]~s.data[i-2]复制到str
str.data[k]=s.data[k];
for(k=i+j-1;
k++)//将s.data[i+j-1]~data[s.length-1]复制到str
str.data[k-j]=s.data[k];
str.len=s.len-j;
实现串的比较的函数:
intStrcmp(SqStrings,SqStringt)
inti,comlen;
if(s.len<
t.len)
comlen=s.len;
//求s和t的共同长度
comlen=t.len;
comlen;
i++){//在共同长度内逐个字符比较
if(s.data[i]<
t.data[i])
return-1;
elseif(s.data[i]>
return1;
if(s.len==t.len)
return0;
//s==t
elseif(s.len<
t.len)
//s<
t
else
return1;
//s>
实现串逆序输出的函数:
voidReverseSq(SqString&
str)
inti,j;
chart;
j=str.len-1;
//首尾调换
j)
t=str.data[i];
str.data[i]=str.data[j];
str.data[j]=t;
j--;
五.调试分析
系统运行结果如下:
六.用户使用说明
用户可任意输入两个串,系统将会自动对这两个串进行比较,复制,判断是否相等,删除,插入,替换等一系列串的基本操作。
七.参考文献
(1)数据结构教程清华大学出版社2009年3月第3版
(2)C语言程序设计高等教育出版社2008年1月第1版
(3)数据结构教程上机实验指导清华大学出版社
(4)数据结构(C语言)实践教程西安电子科技大学出版社
八.对所设计的软件进行自我评价
这个软件所运用了这学期所学的数据结构编写,在要求实现的功能上另外加了功能,如串的插入,删除,连接,逆序输出等。
让这个软件的编写方式不仅仅局限于常规的编程思想上。
没有未解决的问题。
此软件能够正确运行并得到正确结果。
创新点应该在于扩大了软件的功能。
九.程序源代码
#include<
stdio.h>
stdlib.h>
string.h>
//定义顺序串
//串赋值
//判断串是否相等
for(i=0;
//将串t复制给串s
//求串长
//求子串
//串的匹配查询(顺序串)
//串的连接:
返回由两个串连接在一起的新串
//串的替换
//插入串:
将串s2插入到串s1的第i个字符中
j++)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 基本 操作 演示 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)