實驗專案四:串基本操作的實現
課程名稱:資料結構
實驗專案名稱:串基本操作的實現
實驗目的:
1.掌握串的模式匹配操作。
實驗要求:
1、 分別使用bf和kmp演算法完成串的模式匹配。
實驗過程:
bf演算法**;;
1、 設計完成next值的計算函式;
2、 設計完成修正next值的函式;
3、 kmp演算法**;
4、 輸入子串(aaac)和主串(aaabaaaaaac)
5、 輸出子串在主串中開始的位置及不同演算法比較的次數。
此部分實驗報告中給出bf,next,修正next,kmp的**。
實驗結果:
輸入: 子串:aaac; 主串:aaabaaaaaac
輸出:bf,kmp,改進的kmp三種演算法分別比較的次數及查詢到的子串在主串中的位置。
例:bf比較??次 子串位置:8
kmp比較??次 子串位置:8
改進kmp比較??次 子串位置:8
實驗分析:
1.普通next和修正next的區別;
2.列舉除錯執行過程**現的錯誤並分析原因。
要求:(1) 程式要新增適當的注釋,程式的書寫要採用縮排格式。
(2) 程式要具在一定的健壯性,即當輸入資料非法時,程式也能適當地做出反應。
(3) 程式要做到介面友好,在程式執行時使用者可以根據相應的提示資訊進行操作。
(4) 上傳源程式到課堂派。順序表的源程式儲存為stringindex.cpp。
#pragma gcc optimize(2)
#include
using namespace std;
#define pi acos(-1.0)
#define e exp(1.0)
typedef
long
long ll;
char s[
1200
],t[
1200];
ll next[
1200
],nextval[
1200
],lens,lent,cnt_bf,cnt_next,cnt_nextval;
void
get_next
(char
*t)//得到next的值
else
k=next[k];}
return;}
void
get_nextval
(char
*t)//得到nextval的值
return;}
ll bf
(char
*s,char
*t)//暴力匹配
else
break;}
if(j>lent)
return i;
}return0;
}ll kmp_next
(char
*s,char
*t)//使用next值用kmp演算法進行匹配
else
j=next[j];}
if(j>lent)
return i-lent;
return0;
}ll kmp_nextval
(char
*s,char
*t)//使用nextval值用kmp演算法進行匹配
else
j=nextval[j];}
if(j>lent)
return i-lent;
return0;
}int
main()
return0;
}
串基本操作的實現
bf演算法 include 輸入字串用gets函式,故i,j從0開始 include define ok 1 define error 1 define status int define maxsize 255 using namespace std typedef struct 定長儲存 sst...
基於C的串的基本操作實現
字串是計算機中使用非常廣泛的一種結構。許多語言都提供了串處理執行程式。在c語言中,提供了非常豐富的串處理函式。這裡舉幾種串運算,並用c語言實現這些運算。實現 include include define maxn 100 typedef enum status typedef enum boolea...
串的基本操作
include include include include define maxn 50 define ok 1 define error 0 typedef struct strnode snode void creat snode char 建立串 int getsubstr snode i...