串的基本操作及其应用.docx

上传人:b****3 文档编号:4964847 上传时间:2022-12-12 格式:DOCX 页数:20 大小:235.42KB
下载 相关 举报
串的基本操作及其应用.docx_第1页
第1页 / 共20页
串的基本操作及其应用.docx_第2页
第2页 / 共20页
串的基本操作及其应用.docx_第3页
第3页 / 共20页
串的基本操作及其应用.docx_第4页
第4页 / 共20页
串的基本操作及其应用.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

串的基本操作及其应用.docx

《串的基本操作及其应用.docx》由会员分享,可在线阅读,更多相关《串的基本操作及其应用.docx(20页珍藏版)》请在冰豆网上搜索。

串的基本操作及其应用.docx

串的基本操作及其应用

广西工学院计算机学院

《数据结构》课程实验报告书

实验五串的基本操作及其应用

 

学生姓名:

1

学号:

2

班级:

3

指导老师:

4

专业:

计算机学院软件学院

 

提交日期:

2013年6月21日

 

1.实验目的

1)掌握串的定义、存储结构及基本操作。

2.实验内容

(1)建立一个串,实现串的基本操作。

包括:

//1.判串长:

返回串s的元素个数。

intStrLength(HStringS)

//2.判空串:

若串s为空串,则返回true

StatusStrEmpty(HStringS)

//3.串赋值:

现有串s,空串t,实现将s赋值给t的操作

StatusStrAssign(HString&T,HStringS)

//4.串连接:

现有串s和t,实现将t链接到串s之后的操作。

(流程图)

StatusStrConcat(HString&S,HStringT)

//5.串比较:

依次比较2个串s和t,若长度相同且字符相同,则串相同,返回0,若s>t,则返回值>0,若s

StatusStrCompare(HStringS,HStringT)

//6.串替换:

在主串s中用子串v替换所有的子串t

StatusStrReplace(HString&S,HStringV,HStringT)

//7.串插入:

在主串s中的给定位置pos插入子串t

StatusStrInsert(HString&S,intpos,HStringT)

//8.取子串:

将串s中从起始位置pos开始长度len的字符串放入另一个串t

StatusSubString(HString&S,intpos,intlen,HString&T)

//9.串删除:

删除串s中的子串t。

StatusStrDelete(HString&S,HStringT)

//10.求子串位置:

从主串s中取出从第i个位置开始、长度和串t相同的子串,和t进行比较,若相等,则t在s中的位置值为i

StatusStrIndex(HString&S,inti,HStringT)

//

(2)串应用:

设有串s,求出它的所有子串,并输出。

StatusSubString_All(HStringS)

3.实验要求

(1)上机前交实验源程序(纸质版),由学习委员统一收好交老师(附上不交同学名单)。

(2)用一切你能想到的办法解决遇到的问题,培养解决问题的能力。

(3)实验课上进行答辩。

(4)实验报告当场交。

报告内容包括:

实验目的、实验内容、实验代码、实验运行结果以及实验体会供五部分。

串的堆分配存储

typedefstruct

{

char*ch;//若是非空串,则按串长分配储存区,否则ch为NULL

intlength;//串长度

}HString;

2.

3.主要算法

3.1顺序存储结构

(1)结构定义:

#include

#include

#include

#defineMAX255

typedefcharsstring[MAX+1];

intstrlength(sstrings);//判断串长

intstrempty(sstrings);//判断空串

intstrassign(sstring&t,char*s);//串赋值

intconcat(sstring&t,sstrings1,sstrings2);//串连接

intstrcompare(sstrings,sstringt);//串的比较

voidstrprint(sstrings);//输出

intstrinsert(sstrings,intpos,sstringt);//串插入

intstrdelete(sstrings,intpos,intlen);//删除字串

intreplace(sstrings,sstringt,sstringv);//串的替换

intsubstring(sstring&sub,sstrings,intpos,intlen);//取子串

intindex(sstrings,sstringt,intpos);//字串定位

 

//串赋值

intstrassign(sstring&t,char*s)

{//初始条件:

字符串chars已经存在

//操作结果:

生成一个其值等于chars的串t

inti,n;

n=strlen(s);

if(n>=MAX)

return0;

else

{

t[0]=n;

for(i=1;i<=t[0];i++)//依次给串赋值

t[i]=s[i-1];

return1;

}

}

 

//求串长度

intstrlength(sstrings)

{//操作结果:

返回串s的元素

returns[0];

}

 

//判断串是否空

intstrempty(sstrings)

{

return(s[0]==0);//返回值

}

 

//串连接

intconcat(sstring&t,sstrings1,sstrings2)

{//初始条件:

字符串s1和s2已经存在

//操作结果:

用T返回s1和s2连接成的新串。

inti;

if(s1[0]+s2[0]<=MAX)

{

for(i=1;i<=s1[0];i++)//依次把串s1中的元素赋值给串t

t[i]=s1[i];

for(i=1;i<=s2[0];i++)

t[i+s1[0]]=s2[i];

t[0]=s1[0]+s2[0];//计算串t的长度

return1;

}

else

{

for(i=1;i<=s1[0];i++)

t[i]=s1[i];

for(i=1;i<=MAX-s1[0];i++)

t[i+s1[0]]=s2[i];

t[0]=MAX;

return1;

}

}

 

//串的比较

intstrcompare(sstrings,sstringt)

{//初始条件:

字符串chars已经存在

//操作结果:

若是s>t,则返回值>0,若是s=t,则返回值=0,若是s

inti;

for(i=1;i<=t[i]&&i<=s[0];i++)

if(s[i]!

=t[i])

returns[i]-t[i];//返回大于的值

returns[0]-t[0];//返回大于的值

}

 

//输出

voidstrprint(sstrings)

{//初始条件:

字符串chars已经存在

//操作结果:

依次输出串中的元素

inti;

for(i=1;i<=s[0];i++)

printf("%c",s[i]);

printf("\n\n");

}

 

//串插入

intstrinsert(sstrings,intpos,sstringt)

{//初始条件:

字符串chars已经存在

//操作结果:

在串s第pos个字符之前插入串t,完成插入返回,否则返回

inti;

if(pos<1||pos>s[0]+1)

return0;

if(s[0]+t[0]<=MAX)

{

for(i=s[0];i>=pos;i--)

s[i+t[0]]=s[i];

for(i=pos;i

s[i]=t[i-pos+1];

s[0]+=t[0];

return1;

}

else

{

for(i=s[0];i>=pos;i--)

s[i+MAX-s[0]]=s[i];

for(i=pos;i<=s[0];i++)

s[i]=t[i-pos+1];

s[0]=MAX;

return1;

}

}

//删除字串

intstrdelete(sstrings,intpos,intlen)

{//初始条件:

字符串chars已经存在

//操作结果:

在串s第pos个字符起删除长度为len的子串,删除成功返回,否则返回

inti;

if(pos<1||pos>s[0]-len+1||len<0)

return0;

for(i=pos+len;i<=s[0];i++)//依次删除串中指定的元素

s[i-len]=s[i];

s[0]-=len;

return1;

}

 

//串的替换

intreplace(sstrings,sstringt,sstringv)

{//初始条件:

字符串chars已经存在

//操作结果:

串t被s替换,成功返回,否则返回

inti=1;

intk;

if(strempty(t))//判断串t为空

return0;

do

{

i=index(s,t,i);

printf("%d",i);

if(i)

{

strdelete(s,i,t[0]);//调用函数

k=strinsert(s,i,v);//调用函数

if(!

k)

return0;

i+=v[0];

}

}while(i);

return1;

}

 

//取子串

intsubstring(sstring&sub,sstrings,intpos,intlen)

{//初始条件:

字符串chars已经存在

//操作结果:

用sub返回串s的第pos个字符起长度为len的子串

inti;

if(pos<1||pos>s[0]||len<0||len>s[0]-pos+1)

return0;

for(i=1;i<=len;i++)

sub[i]=s[pos+i-1];

sub[0]=len;

return1;

}

//字串定位

intindex(sstrings,sstringt,intpos)

{//初始条件:

字符串chars已经存在

//操作结果:

返回子串T在主串S中第pos个字符之后的位置,

//若不存在,则函数值为

inti,j;

if(1<=pos&&pos<=s[0])

{

i=pos;

j=1;

while(i<=s[0]&&j<=t[0])

if(s[i]==t[j])

{

i++;

j++;

}

else

{

i=i-j+2;

j=1;

}

if(j>t[0])

returni-t[0];

else

return0;

}

else

return0;

}

//主函数

voidmain()

{

inti,pos,len;

chara[MAX],b[MAX],c[MAX];

sstrings,t,v,sews,sub;

intk;//设置选项变量

while

(1)

{

//system("cls");//清屏

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

printf("\n\t*串的基本操作及其应用*");

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

printf("\t*1.串的赋值2.串比较*\n");

printf("\t*3.串的长度4.取子串*\n");

printf("\t*5.字符串替换6.字符串插入*\n");

printf("\t*7.字符串连接8.销毁队列*\n");

printf("\t*9.清空队列0.退出*\n");

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

printf("请选择选项<1-9>:

");//打印选项功能提示

scanf("%d",&k);

if(k<0||k>9)

{

printf("输入有误,请重新输入!

");

printf("\n");

continue;

}

switch(k)//分支结构来调用各功能子函数

{

case1:

printf("字符串的赋值!

\n");

printf("请输入两个字符串!

\n");

printf("请输入第一个字符串;");

scanf("%s",a);

strassign(s,a);

printf("\n");

printf("请输第二个字符串;");

scanf("%s",b);

strassign(t,b);

printf("第一个字符串为:

");

strprint(s);

printf("第二个字符串为:

");

strprint(t);

printf("\n");

break;//退出并重新进入主菜单

case2:

printf("串的比较!

\n");

i=strcompare(s,t);//调用函数

if(i==0)

printf("两个字符串相等!

\n");

elseif(i<0)

printf("第一个字符串比第二个字符串小!

\n");

else

printf("第一个字符串比第二个字符串大!

\n");

printf("\n");

break;//退出并重新进入主菜单

 

case3:

printf("求串的长度!

\n");

i=strlength(s);//调用函数

printf("串的长度为:

%d",i);

printf("\n");

break;//退出并重新进入主菜单

case4:

printf("取子串!

\n");

printf("输入一个字符串:

");

scanf("%s",a);

strassign(s,a);//调用函数

printf("\n");

printf("字符串为:

");

strprint(s);

printf("请输入位置和长度!

\n");

scanf("%d%d",&pos,&len);

if(substring(sub,s,pos,len))

{

printf("所取子串为:

");

strprint(sub);

}

else

printf("取子串失败!

");

printf("\n");

break;//退出并重新进入主菜单

case5:

printf("字符串替换!

\n");

printf("请输入主字符串:

");

scanf("%s",a);

strassign(s,a);//调用函数

printf("\n");

printf("请输需要替换子串:

");

scanf("%s",b);

strassign(t,b);//调用函数

printf("请输入需要换成的子串:

");

scanf("%s",c);

strassign(v,c);//调用函数

printf("主字符串为:

");

strprint(s);

printf("需要替换子串为:

");

strprint(t);//调用函数

printf("需要换成的子串为:

");

strprint(v);

if(replace(s,t,v))

{

printf("替换后的新串为:

");

strprint(s);

}

else

printf("替换失败\n");

printf("\n");

break;//退出并重新进入主菜单

case6:

printf("字符串插入\n");

printf("请输入主字符串\n");

scanf("%s",a);

strassign(s,a);//调用函数

printf("请输入要插入的字符串\n");

scanf("%s",b);

strassign(t,b);//调用函数

printf("请输入要插入的位置\n");

scanf("%d",&pos);

printf("主字符串为:

");

strprint(s);//调用函数

printf("要插入的字符串为:

");

strprint(t);

if(strinsert(s,pos,t))

printf("插入后的新串为:

");

strprint(s);//调用函数

printf("\n");

break;//退出并重新进入主菜单

case7:

printf("字符串连接\n");

i=concat(sews,s,t);//调用函数

if(i==0)

printf("连接失败\n");

else

{

printf("连接后的新串为:

\n");

strprint(sews);//调用函数

}

printf("\n");

break;//退出并重新进入主菜单;

case0:

break;

}

}

}

3.流程图

1.串比较流程图

 

2.串连接流程图

 

4.程序运行结果

(1)实验内容

(1)

运行结果如下:

运行结果如下:

运行结果如下:

运行结果如下:

运行结果如下:

运行结果如下:

运行结果如下:

 

5.心得体会。

图的基本操作还有许多的不解之处,特别是最短距离

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

当前位置:首页 > 法律文书 > 调解书

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

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