串的基本操作及其应用Word格式.docx
《串的基本操作及其应用Word格式.docx》由会员分享,可在线阅读,更多相关《串的基本操作及其应用Word格式.docx(20页珍藏版)》请在冰豆网上搜索。
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.心得体会。
图的基本操作还有许多的不解之处,特别是最短距离