数据结构实验报告串与模式匹配文档格式.docx
- 文档编号:21873245
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:13
- 大小:17.82KB
数据结构实验报告串与模式匹配文档格式.docx
《数据结构实验报告串与模式匹配文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告串与模式匹配文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
2.1的源程序:
Sinclude<
stdio.h>
SdefineMAXSIZE256//chars[MAXSIZE];
//求串长
intStrLength(char*s){
inti二0;
while(s[i]!
='
\0'
)
i++;
return(i);
}
//串联接
intStrConcat(char*si,char*s2,char*s)
{
inti二0,j,lenlFlen2;
lenl=StrLength(sl);
len2=StrLength(s2);
if(lenl+len2>
MAXSIZE-1)
return(0);
j二0;
wh订e(sl[j]!
=\or)
s[i]=sl[j];
j++;
while(s2[j]!
=\0F)
s[i]=s2[j];
s[i]二P;
return
(1);
//求子串
intStrSub(char*tfchar*s,inti,intlen){
intslen,j;
slen=StrLength(s);
if(i<
li>
slenlen<
0len>
slen-i+l)printf(-参数不对0;
return(0);
}for(j=0;
j<
len;
j++)
t[j]=s[i+j-l];
t[j]=\0'
;
//串比较
intStrCmp(char*sl,char*s2)
while(sl[i]=s2[i]&
&
sl[i]!
\0'
)i++;
return(sl[i]二二s2[i]);
//输岀串
voidDisp_Str(char*s)
inti;
for(i=0;
i<
StrLength(s);
i++)
printfs[i]);
}printf("
\n"
);
〃插入串并保存到新串中
intStrinsert(char*s,char*si,inti,char*s2){
intj二0,k,lensl,lens;
lens=StrLength(s);
lensl=StrLength(si);
for(k=0;
k<
i-l;
k++)
{s2[j]=s[k];
j++;
for(int1=0;
Klensl;
1++)
s2[j]=sl[l];
for(intm二k;
m<
lens;
m++)
s2[j]=s[m];
j++;
s2[j]二'
〃删除串中元素并保存到新串中
intStrDelete(char*s,char*s2,inta,intb){
inti二0,lens=StrLength(s);
for(intj二0;
(a-1);
s2[i]=s[j];
for(intk=(a+b-l);
s2[i]=s[k];
s2[i]=\0'
〃用一个串替代另一个串中部分字符并保存到新串中
intTiDaiStr(char*s,char*si,char*s2,inta,intb){
inti二0,lens,lensl;
lensl=StrLength(si);
for(intj二0;
a-l;
for(intk=0;
lensl;
s2[i]=sl[k];
for(intl=(a+b-1);
Klens;
1++){
s2[i]=s[l];
intmain(void)
printfC
(1)建立串s=abcdefghefghijklmn和sl=xyz\n?
,);
chars〔MAXSIZE]=,zabcdefghefghijklmn^;
charsi[MAXSIZE]二〃xyz"
printfC
(2)输出串s二"
Disp_Str(s);
printf(,z(3)输出串s的长度:
%d\n*»
StrLength(s));
printfC(4)在串s的第9个字符位置插入串si而产生s2\n"
chars2[MAXSIZE];
Strinsert(s,si,9,s2);
printfC(5)输出串s2二"
Disp_Str(s2);
printfC(6)删除串s第2个字符开始的5个字符而产生串s2\n"
StrDelete(s,s2,2,5);
printf(,?
(7)输出串s2:
"
printf("
(8)将串s第2个字符开始的5个字符替换成串si而产生串s2\n"
TiDaiStr(s,si,s2,2,5);
printfC(9)输出s2二"
printf(w(10)提取串s的第2个字符开始的10个字符而产生串s3\n"
printf(*(11)输岀s3二"
);
chars3[MAXSIZE];
StrSub(s3,s,2,10);
Disp_Str(s3);
printfC(12)将串si和串s2连接起来而产生串s4\n"
chars4[MAXSIZE];
StrConcat(si,s2ts4);
printfC(13)输岀串s4O;
Disp_Str(s4);
getchar0;
return(0);
2.2
#include<
#definemaxsize256chars[maxsize];
chart[100];
intnext[maxsize];
intStrLength(char*s)
\0‘)
intChange(char*s)
for(i=StrLength(s)-1;
i>
=0;
i--){
s[i+l]=s[i];
s[0]=StrLength(s);
//简单模式匹配
intStrIndex_Bf(char*s,char*t)
inti=l,j=l;
while(i<
=s[O]&
j<
=t[O])
if(s[i]=t[jj)
j卄;
else
i=i-j+2;
j二1;
辻G〉t[o])
return(i-t.O]);
returnT;
//输岀next值
intDis_next(intnext[],char*t)
for(i=l;
=t[0];
printf(z/%dz,,nextZiJ);
printf("
returnnext[i];
//模式串求next值
voidGetnext(char*t,intnext[])
inti=l,j=0;
next[l]=0;
wh订e(i〈t[0])
if(j=0
++i;
++J;
nextLiJ=j;
j=next[j];
〃采用KMP算法求t在s中的位苣
intSerIndex_KMP(char*s,char*t,intpos,intnext[]){
inti=pos,j=l;
while(i<
=t[Oj)
if(j=O|s[i]==t[j])
if(j>
t[O])
return
printfC
(1)建立abcabcdabcdeabcdefabcdefg目标串s和abcdeabcdefab模式串t\n"
chars匚=/,abcabcdabcdeabcdefabcdefg/"
chart[」=?
/abcdeabcdefabz,;
Change(s);
Change(t);
(2)简单模式匹配求t在s中的位置:
%d\n"
StrIndex_Bf(s,t));
printf(,z(3)由模式串t求出next值next二"
intnext[maxsize」;
Getnext(t,next);
Dis_next(next,t);
printfC(4)采用KMP算法求t在s中的位置:
%d\n^,Serlndex.KMP(s,t,1,next));
2.2源程序:
#definemaxsize256
chars[maxsize];
chart[100];
wh订e(s[i]!
i―)
sE0]=StrLength(s);
=s[0]&
=t[01)
if(s[i]=t[jl)
j卄;
j=l;
辻(j>
return(i-t[0]);
else
return-1;
intDis_next(intnext[],char*t){
printf(,z%d/z,nextLi]);
returnnext[i];
voidGetnext(char*t,intnext[]){
while(i<
t[0])
if(j=Ot[i]==t[j])
next[i]=j;
elsej=next[j];
}//采用KMP算法求t在s中的位置intSerIndex_KMP(char*s,char*t,intpos,intnext[])
inti=pos,j=l;
=t[0])
if(j=0|s[i]==t[j])
t[ol)
returni-t;
chars[]^abcabcdabcdeabcdefabcdefg'
'
char二"
abcdeabcdefab"
(3)由模式串t求岀next值next二"
intnext[maxsize^;
printfC(4)采用KMP算法求t在s中的位置:
%d\n?
z,SerIndex_KMP(s,t,1,next));
chargetchar0;
运行结果:
»
H振结沟实验\chuan\aIgo2-l.exe
〉建?
7串cdiefuhi/iklmn和si
<
2啪出串r:
-二j"
z小一<
3〉鐘出串3的长度:
:
<
4>
#Ss的第9个宇符位畫插入串"
而产生s2⑸锚「亠<
6〉製瞬吳第2个字符开始的5个字符而产生串s2:
證輝s'
第2个字符刑召的5个字符替换成呂si而产生串s2(9〉输__...
10>
W串3的第2个字符开始的但个字符而产生串品
CJL2〉桜年"
3〉输出
=xyze=ahcdefghefghijklmn
18
s2=abcdefghxyzefghijklmn
s2:
aghefghijkInn亠/S立怎#也•
s2=ax<
y^ghefgh-ijklmn
ts3-bcdcfaliefg
sl和串s2连接起来而产生串S4$s4=xsfzaxyzghefghijklmn
实验结果分析:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 报告 模式 匹配