串基本操作的實現

2021-10-01 03:14:25 字數 1852 閱讀 4392

實驗專案四:串基本操作的實現

課程名稱:資料結構

實驗專案名稱:串基本操作的實現

實驗目的:

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