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

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

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

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

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

0,若s<

t,则返回值<

0.(流程图)

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&

//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<

stdio.h>

stdlib.h>

string.h>

#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);

//字串定位

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);

//返回值

//串连接

t,sstrings1,sstrings2)

字符串s1和s2已经存在

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

inti;

if(s1[0]+s2[0]<

for(i=1;

=s1[0];

i++)//依次把串s1中的元素赋值给串t

t[i]=s1[i];

=s2[0];

i++)

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

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

//计算串t的长度

return1;

=MAX-s1[0];

t[0]=MAX;

intstrcompare(sstrings,sstringt)

若是s>

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

inti;

=t[i]&

&

=s[0];

if(s[i]!

=t[i])

returns[i]-t[i];

//返回大于的值

returns[0]-t[0];

voidstrprint(sstrings)

依次输出串中的元素

printf("

%c"

s[i]);

\n\n"

);

intstrinsert(sstrings,intpos,sstringt)

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

if(pos<

1||pos>

s[0]+1)

if(s[0]+t[0]<

for(i=s[0];

i>

=pos;

i--)

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

for(i=pos;

pos+t[0];

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

s[0]+=t[0];

{

for(i=s[0];

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

for(i=pos;

i<

=s[0];

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

s[0]=MAX;

intstrdelete(sstrings,intpos,intlen)

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

if(pos<

s[0]-len+1||len<

0)

return0;

for(i=pos+len;

i++)//依次删除串中指定的元素

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

s[0]-=len;

intreplace(sstrings,sstringt,sstringv)

串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);

sub,sstrings,intpos,intlen)

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

s[0]||len<

0||len>

s[0]-pos+1)

=len;

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

sub[0]=len;

//字串定位

intindex(sstrings,sstringt,intpos)

返回子串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];

return0;

else

//主函数

voidmain()

inti,pos,len;

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

sstrings,t,v,sews,sub;

intk;

//设置选项变量

while

(1)

//system("

cls"

//清屏

printf("

\n\t***************************************************"

\n\t*串的基本操作及其应用*"

\n\t***************************************************\n"

\t*1.串的赋值2.串比较*\n"

\t*3.串的长度4.取子串*\n"

\t*5.字符串替换6.字符串插入*\n"

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

\t*9.清空队列0.退出*\n"

\t****************************************************\n"

请选择选项<

1-9>

:

"

//打印选项功能提示

scanf("

%d"

&

k);

if(k<

0||k>

9)

输入有误,请重新输入!

"

\n"

continue;

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

{

case1:

字符串的赋值!

请输入两个字符串!

请输入第一个字符串;

scanf("

%s"

a);

strassign(s,a);

请输第二个字符串;

b);

strassign(t,b);

第一个字符串为:

strprint(s);

第二个字符串为:

strprint(t);

break;

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

case2:

串的比较!

i=strcompare(s,t);

if(i==0)

两个字符串相等!

elseif(i<

0)

第一个字符串比第二个字符串小!

第一个字符串比第二个字符串大!

case3:

求串的长度!

i=strlength(s);

串的长度为:

case4:

取子串!

输入一个字符串:

字符串为:

strprint(s);

请输入位置和长度!

%d%d"

pos,&

len);

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

printf("

所取子串为:

strprint(sub);

取子串失败!

case5:

字符串替换!

请输入主字符串:

请输需要替换子串:

请输入需要换成的子串:

c);

strassign(v,c);

主字符串为:

需要替换子串为:

需要换成的子串为:

strprint(v);

if(replace(s,t,v))

替换后的新串为:

strprint(s);

替换失败\n"

case6:

字符串插入\n"

请输入主字符串\n"

请输入要插入的字符串\n"

请输入要插入的位置\n"

scanf("

pos);

主字符串为:

要插入的字符串为:

strprint(t);

if(strinsert(s,pos,t))

插入后的新串为:

strprint(s);

case7:

字符串连接\n"

i=concat(sews,s,t);

if(i==0)

连接失败\n"

连接后的新串为:

strprint(sews);

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

case0:

break;

3.流程图

1.串比较流程图

2.串连接流程图

4.程序运行结果

(1)实验内容

(1)

运行结果如下:

5.心得体会。

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

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

当前位置:首页 > 高等教育 > 艺术

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

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