#include
#include "stdio.h"
#include "stdlib.h"
#include "cstdlib"//syste()函式需要該標頭檔案;
using namespace std;
#define ok 1
#define error 0
//#define overflow -2
typedef int status;
typedef char selemtype;
#define maxlen 255 // 使用者可在255以內定義最大串長,超出這個長度則超出部分被捨去,稱為截斷
//00 _棧:typedef char sstring[maxlen+2];//0不用,最後乙個\0
//00 _堆:串的堆順序儲存,動態分配,結構無資料域,需建立或初始化中開闢空間
typedef struct hstring;//heap堆,故hstring,sstring?
//01初始化串 p5801...maxlen\0,多兩個空間不放字元
status inithstring(hstring&s)
//02建立串,從鍵盤錄入<=maxlen
status createhstring(hstring&s)
else
break;
}s.ch[i] = '\0';
s.length = i-1;
return ok;
}//03 bf演算法
int index_bf(hstring s, hstring t) //返回模式串t在主串s中第一次出現的位置。因返回的是位置,不是狀態,雖都是int,但不用status,另說清誰是模式串,誰是主串。
else //看上面例子,不管那一輪只要失敗,那麼有i回溯到初值的下一位; j 始終是第1個和si,即j=1;
}//迴圈完也只有兩種情形,要麼匹配,要麼失敗,換成計算機語言仍就是if else;
cout << "bf一共比較了" << sum << "次" << endl;
if (j>t.length)
return (i - t.length); //返回位置. 比較成功的次數是t.length, i從初值也後移了t.length,i-t.length回到初值
else
return 0;
}//04 next函式
void get_next(hstring t, int next)//求模式串t的next函式值,其實是知next[1],求next[2],依次……,也即假設已知next[j], ++j後求得next[j]即未我所求;
else//匹配失敗的情況,就要進行回溯,下一輪tj與tk'比較,j不動,k'=next[k];
k = next[k];}}
//05 nextval函式
void get_nextval(hstring t, int nextval)//求模式串t的nextval函式值,在next函式的基礎上只需改動tj=tk相等時的情形,讓nextval[j]=nextval[k]而不是k ;
else//匹配失敗的情況,就要進行回溯,下一輪tj與tk'比較,j不動,k'=next[k];
k = nextval[k];}}
//06 kmp,到底是next還是nextval,看主函式呼叫該子函式傳的引數是哪乙個
int index_kmp(hstring s, hstring t, int next)//利用非空模式串t的next函式求t在主串s中的位置的kmp演算法,形式上近同bf演算法
else
j = next[j]; // 利用next函式確定下一次模式串中第j個字元與t.ch[i]比較,i不變
}cout << "kmp一共比較了" << sum << "次" << endl;
if (j>t.length) // 匹配成功
return i - t.length;
else
return 0;
}//07輸出串
void printstr(hstring str)//輸出串
printf("\n");
}//08列印next值,主函式呼叫該函式,傳的引數是next,則列印next[j],傳nextval,則列印nextval[j], 該子函式中的next只是乙個形參,可以起別的名
void printnext(int next)
printf("\n");
}void main()
while (ch == 'y' || ch == 'y');
*/
system("pause");
}
資料結構實驗四 串(模式匹配,刪除子串)
實驗三串 一 實驗目的 1 熟悉串的順序儲存結構 2 掌握串的基本運算及應用 二 實驗內容 1 模式匹配 串採用順序儲存結構,編寫樸素模式匹配演算法,查詢在串中是否存在給定的子串。本標頭檔案為實驗四第一問串的順序儲存 include using namespace std const int siz...
資料結構實驗四 串
一 實驗目的 通過訓練,加深理解並把握串的基本運算的特點。二 實驗內容 問題描述 本題目中的串編輯要求對串實現以下兩種功能 本題目中的串編輯要求對串實現以下兩種功能 插入 把乙個字串插入到給定串的指定位置 刪除 將串中某指定位置開始的若干字元從串中刪除 參考程式 include include in...
資料結構(四) 串
串 string 是由零個或多個字元構成的有限序列,又叫字串 空格串 只包含空格的串 空串 零個字元的串 串的大小比較 對於數字來說,1與2 誰大誰小不用討論,但是 兩個字串怎麼比較大小呢?計算機的常用字元是使用標準的ascii編碼。所以我們字串的比較就是逐個的比較ascii值的大小 串的一些操作函...