串是零個或多個字元的有限序列,我們可以將其看作是種特殊的線性表,其特殊性在於線性表的資料元素的型別總是字元性,字串的資料物件約束為字符集。
串的儲存方式有三種:定長順序儲存表示、堆分配儲存表示、塊鏈儲存表示。
本文主要講解串的定長順序儲存表示及其操作的實現
#include
using
namespace std;
#define true 1
#define ok 1
#define error 0
#define false 0
#define maxstrlen 255
//串的最大儲存容量定義為255
typedef
unsigned
char sstring[maxstrlen +1]
;//定義串的型別別名
typedef
int status;
//串的定長順序儲存表示,sstring[0]用來儲存串的元素個數
sstring[0]用來儲存串的元素個數
status strassign
(sstring& t,
char
* chars)
}
status strempty
(sstring s)
void
strprint
(sstring t)
status strlength
(sstring s)
status clearstring
(sstring s)
status strcopy
(sstring& t, sstring& s)
若s>t,則返回值》0;若s=t,則返回值=0;若sstatus strcompare
(sstring s, sstring t)
return s[0]
- t[0]
;//如果字元全部相等,返回他們字元長度的差值
}
status strdelete
(sstring s,
int pos,
int len)
status strinsert
(sstring &s,
int pos, sstring t)
else
}
status substring
(sstring& sub, sstring s,
int pos,
int len)
return ok;
}
status concat
(sstring& t, sstring s1, sstring s2)
//兩串用t返回s1和s2聯接而成的新串。若未截斷,則返回true,否則false
else
if(s1[0]
< maxstrlen)
//兩串的長度的總和超過最大容量,串一未超過,串二被截斷
else
//兩串均超過最大容量,均被截斷,取串一中的元素
}
status index
(sstring t, sstring s,
int pos)
else
if(j > t[0]
)return i - t[0]
;else
return0;
}}
此方法的時間複雜度太大,故採用了一種改進的方法:kmp演算法具體思路如下:
故引入模式串中第j個字元的下乙個待比較的位置 定義為
注意:後乙個字元的next值比前乙個字元的next值最多大1
模式串的第乙個字元的next值為0,第二個為1,後面的需要根據定義依次判斷
例如:
關於next[j]值的計算思想,我認為西安郵電大學的王燕老師的講解很是詳細!
西安郵電大學慕課
分兩部分:next值計算函式和kmp演算法
void
get_next
(sstring s,
int next)
//改進的模式匹配kmp演算法中的next[j]的獲取
else
}}
status indexkpm
(sstring t, sstring s,
int pos,
int next)
else j = next[j];}
if(j > t[0]
)return i - t[0]
;else
return0;
}
當你自墮深淵,只為尋得陰光,甘願被吞噬時,我也許該殺死那個你了
「 你本來是有機會的,但是你輸了,你不能總是活在過去 」 ——派大星
串的定長順序儲存表示
串的定長順序儲存表示 define maxstrlen 40 使用者可在255以內定義最大串長 1個位元組 typedef char sstring maxstrlen 1 0號單元存放串的長度 串採用定長順序儲存結構的基本操作 14個 sstring是陣列,故不需引用型別。此基本操作包括演算法4....
串的定長順序儲存表示
串的定長順序儲存表示是一種類似於線性表的順序儲存結構,用一組位址連續的儲存單元儲存串值的字串行。在實現時主要實現以下功能 int length sstring s 串長 bool stringconcat sstring t,sstring s1,sstring s2 用t返回s1和s2連線的串 v...
串的定長順序儲存表示
c4 1.h 串的定長順序儲存表示 define maxstrlen 40 使用者可在255以內定義最大串長 1個位元組 typedef char sstring maxstrlen 1 0號單元存放串的長度 bo4 1.c 串採用定長順序儲存結構 由c4 1.h定義 的基本操作 14個 sstri...