一、實現主要功能為:
1、輸入模式串、目標串
2、根據目標串生成next和nextval陣列
3、根據next或者nextval進行匹配。
二、程式截圖:
三、**:
1 #include 2 #include 3 #include4 #include 5
using
namespace
std;67
#define maxsize 1000 //
最大字元數89
struct sqstring;
1314
void getnext(sqstring t,int next) //
求出模式串t的next陣列
1523
else
24 k =next[k];25}
26}2728
void getnextval(sqstring t,int nextval) //
求出模式串t的valnext陣列
2940
else
41 k =nextval[k];42}
43}4445
void printnext(sqstring t,int next) //
輸出next陣列
4655 printf("\n"
);56 printf("
next[j]\t");
57 i=j;
58 printf("
%d\t
",next[i++]);
59for(;i8;i++)
62 printf("
\n\n
"); 63}
64}6566
void printnextval(sqstring t,int nextval) //
輸出nextval陣列
6776 printf("\n"
);77 printf("
nextval[j]\t");
78 i=j;
79 printf("
%d\t
",nextval[i++]);
80for(;i7;i++)
83 printf("
\n\n
"); 84}
85}8687
int kmpindex1(sqstring s,sqstring t,int
next)
8896
if(j>=t.length)
97return i-t.length;
98else
99return -1
;100
}101
102int kmpindex2(sqstring s,sqstring t,int
nextval)
103111
if(j>=t.length)
112return i-t.length;
113else
114return -1
;115
}116
117int menu() //
操作選單
118130
131void reply(sqstring &s,sqstring &t,int next,int nextval,int
in) //
對選單的選項進行應答
132151
printnext(t,next);
152break
;153
case
4: //
輸出模式串的nextval陣列
154if(next[0]==0
)158
printnextval(t,nextval);
159break
;160
case
5: //
使用next進行匹配
161if(s.data[0]=='\0'
)165
if(next[0]==0
)169
in =kmpindex1(s,t,next);
170if(in==-1
)171 printf("
匹配失敗!\n\n");
172else
180break
;181
case
6: //
使用nextval進行匹配
182if(s.data[0]=='\0'
)186
if(next[0]==0
)190
in =kmpindex2(s,t,nextval);
191if(in==-1
)192 printf("
匹配失敗!\n\n");
資料結構實驗 串的定義,基本操作及模式匹配
掌握這種抽象資料型別的特點 熟練掌握串的順序儲存結構表示和基本操作,並能利用這些基本操作實現串的其他各種操作。分別用兩種儲存方式實現 串的定長順序儲存實現 串的定長順序儲存結構 include include include define true 1 define false 0 define o...
資料結構之串的基本操作
1 串基本術語 空串 空串指長度為0的串,其不包含任何字元 空格串 不同於空串,它是由乙個或多個空格構成的串。雖然是空格,但在計算長度時要把空格的個數算在內 串比較 串的大小比較時以字元的ascii碼值作為依據。2 串基本操作 賦值操作 連線操作 求串長 竄的比較和求子串。3 串的儲存結構 順序儲存...
資料結構實驗 順序表的基本操作
include 1 1儲存結構 define maxsize 100 typedef struct sqlist 1 2初始化順序表並放入n個資料 void initlist sqlist l 1 3初始化順序表並放入n個資料 void listinsert sqlist l,int i,int e...