数据结构课程设计串基本操作演示系统.docx

上传人:b****6 文档编号:7218773 上传时间:2023-01-22 格式:DOCX 页数:24 大小:62.71KB
下载 相关 举报
数据结构课程设计串基本操作演示系统.docx_第1页
第1页 / 共24页
数据结构课程设计串基本操作演示系统.docx_第2页
第2页 / 共24页
数据结构课程设计串基本操作演示系统.docx_第3页
第3页 / 共24页
数据结构课程设计串基本操作演示系统.docx_第4页
第4页 / 共24页
数据结构课程设计串基本操作演示系统.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

数据结构课程设计串基本操作演示系统.docx

《数据结构课程设计串基本操作演示系统.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计串基本操作演示系统.docx(24页珍藏版)》请在冰豆网上搜索。

数据结构课程设计串基本操作演示系统.docx

数据结构课程设计串基本操作演示系统

附件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

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

当前位置:首页 > 工程科技 > 兵器核科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1