第五次作業

2022-08-11 21:06:12 字數 2831 閱讀 3057

|這個作業屬於哪個課程 |

|這個作業要求在** |

|這個作業的目標 |了解串的基本概念以及掌握串的基本實現|

|學號 |201820491|

一、實驗目的

1、了解串的基本概念

2、掌握串的模式匹配演算法的實現

二、實驗預習

說明以下概念

1、模式匹配:模式匹配是資料結構中字串的一種基本運算,給定乙個子串,要求在某個字串中找出與該子串相同的所有子串,這就是模式匹配。

2、bf演算法:暴力匹配(bf)演算法是普通的模式匹配演算法,bf演算法的思想就是將目標串s的第乙個字元與模式串t的第乙個字元進行匹配,若相等,則繼續比較s的第二個字元和t的第二個字元;若不相等,則比較s的第二個字元和t的第乙個字元,依次比較,直到得出最後的匹配結果。

3、kmp演算法:kmp演算法是一種改進的字串匹配演算法,由d.e.knuth,j.h.morris和v.r.pratt提出的,因此人們稱它為克努特—莫里斯—普拉特操作(簡稱kmp演算法)。kmp演算法的核心是利用匹配失敗後的資訊,儘量減少模式串與主串的匹配次數以達到快速匹配的目的。具體實現就是通過乙個next()函式實現,函式本身包含了模式串的區域性匹配資訊。

三、實驗內容和要求

1、閱讀並執行下面程式,根據輸入寫出執行結果。

typedef structsqstring;

int strcompare(sqstring s1,sqstring s2); /串的比較/

void show_strcompare();

void strsub(sqstring s,int start,int sublen,sqstring sub);

/求子串/

void show_substring();

int strcompare(sqstring s1,sqstring s2)

void show_strcompare()

void strsub(sqstring s,int start,int sublen,sqstring sub)

for(i=0;idata[i]=s->data[start+i-1];

sub->length=sublen;

}void show_substring()

int main()

}while(n);

return 0;

}執行程式

輸入:1

student

students

2computer data stuctures104

執行結果:

input string s:computer data stuctures

input start:10

input sublen:4

substring is :data

2、實現串的模式匹配演算法。補充下面程式,實現串的bf和kmp演算法。

typedef structsqstring;

int index_bf(sqstring *s,sqstring *t,int start);

void getnext(sqstring *t,int next);

int index_kmp(sqstring *s,sqstring *t,int start,int next);

void show_index();

int index_bf(sqstring *s,sqstring *t,int start)

else

if(j>t->length)

return(pos);

else

return(-1);

}void getnext(sqstring *t,int next)else

j=next[j];}}

int index_kmp(sqstring s,sqstring t,int start,int next)

else

j=next[j];

if(j>=t->length)

return(i-j);

else

return(-1);

}void show_index(),i;

printf("\n

show index\n");

printf("input string s:");

gets(s.data);

s.length=strlen(s.data);

printf("input string t:");

gets(t.data);

t.length=strlen(t.data);

printf("input start position:");

scanf("%d",&k);

printf("bf:\nthe result of bf is %d\n",index_bf(&s,&t,k));

getnext(&t,next);

printf("kmp:\n");

printf("next

第五次作業

一 問題及 include using namespace std class time void add a minute void add an hour void add seconds int n void add minutes int n void add hours int n voi...

第五次作業

當我們在討論多型性的時候,通常會用過載函式進行舉例,而這次發現的問題主要在過載運算子上,因此我希望通過對過載運算子的測試來得出乙個結論。我們想知道為什麼前置運算子和後置運算子會有區別,因此設計了乙個實驗來證明它 得到最終結果如預期那樣。通過這次作業,我能感受到前置和後置運算子的區別,通過x 和y x...

第五次作業

insert into student sno,sname,s sdept,sage values 201215128 陳冬 男 is 18 建表時規定學號唯一,而在建表時已經加入了該學號,所以不能有兩個相同學號。3.70 insert into student sno,sname,s sdept,...