**如下:
#include
#include
#include
#define maxsize 50
//靜態順序串的最大容納量
typedef
struct
sstring;
void
initstring
(sstring &s)
//初始化串,靜態順序串中,只讓串長等於0,便是對串的初始化
intstrassign
(sstring &s,
char chars)
//串的賦值,使陣列chars中的資料元素填入串s中
s.ch[i+1]
= chars[i]
;//串的儲存是從1開始的,而陣列元素的儲存是從0開始的
i++;}
s.length = i;
//長度便是i
return0;
}int
isempty
(sstring s)
//判斷串是否為空,如果為空返回1,否則返回0
void
outputstr
(sstring s)
//列印串
intstrcopy
(sstring &t,sstring s)
//串s的copy(複製),使串s中的資料複製到串t中
int i;
for(i=
1;i<=s.length;i++
)//利用迴圈對空串t賦值
t.length = s.length;
//因為是拷貝,所以串t長度等於串s長
return0;
}int
strcompare
(sstring s,sstring t)
//比較串s和串t的大小,
intsubstring
(sstring &t,sstring s,
int i,
int len)
//求子串
if(i<
1||i>s.length)
//判斷位置是否錯誤
if(i+len > s.length+1)
//判斷所求子串是否在串s的範圍內
int j=
1,a=i;
for(
;i)//利用迴圈賦值
t.length = len;
//子串長為len
return0;
}int
strinset
(sstring &s,sstring t,
int i)
//串的插入,使串t插入到串s的第i個位置
if(i<
1||i>s.length+1)
//判斷插入位置i是否合理
sstring l;
//重新申請乙個串
l.length = s.length+t.length;
//使串s和串t都插入到重新申請的串l中
int j=1;
for(
;j)//在串s的第i位之前的資料匯入串l
l.ch[j]
= s.ch[j]
;for
( j=
1;j<=t.length;j++
)//串l第i位開始,匯入串t
l.ch[i+j-1]
= t.ch[j]
;for
( j=i+t.length;j<=l.length;j++
)//使未匯入串l的串s剩餘部分匯入
l.ch[j]
= s.ch[j-t.length]
; s = l;
//輸出s
return0;
}int
strdelete
(sstring &s,
int i,
int len)
//串s的刪除,刪除串s從第i位開始長度為len的子串,並返回s
if(i+len>s.length+1)
//判斷所刪除子串是否在串s的範圍內
for(
;i1;i++
) s.ch[i]
= s.ch[i+len]
; s.length = s.length-len;
//長度變為刪除之後的長度
return0;
}int
bf(sstring s,sstring t)
//求子串在主串的位置 ,bf演算法
else
//繼續比較後繼字元 }if
(j<=t.length)
//匹配失敗
return0;
return i-j+1;
//匹配成功,並返回其值
}int
main()
(完) 串的BF演算法
專案名稱 串的模式匹配演算法 編譯環境 vc 2008 作者相關 最後修改 2019.10.11 學習目標 1.bf演算法 注意事項 1.測試所有功能是否正常 include include define error 0 define ok 1 define maxstrlen 255 typede...
串的模式匹配(C語言實現) BF演算法
串的模式匹配演算法 子串的定位運算 演算法思想 設有主串s,模式t。有 i 和 j 分別指向s和j的首個元素。i 1 j 1 設有pos。pos指t在s中首次出現的位置的首位址。初始指向s的首元素。將t中的首個元素與s中首個元素對比 若相同 i 與j 對比 關於儲存 採用定長順序儲存結構。ps 從下...
串 BF演算法(匹配子串)
include include using namespace std define maxlen 255 bf演算法,匹配子串 typedef struct sstring string strassign sstring s,string e return ok int index bf sst...