串(string)是有零個或多個字元組成的有限序列,有名叫字串。
空格串和空串不一樣,空格串是有內容有長度的,而且可以不止乙個空格。
線性表更關注的是單個元素的操作,比如查詢乙個元素,插入或刪除乙個元素,但串中更多的是查詢子串位置、得到指定位置子串、替換子串等操作。
adt 串(string)
data
串中元素僅由乙個字元組成,相鄰元素具有前驅和後繼關係。
operation
strassign
(t,*chars)
:生成乙個其值等於字串常量chars的串t。
strcopy
(t,s)
:串s存在,由串s複製得串t。
clearstring
(s):串s存在,將串s清空。
stringempty
(s):若串s為空,返回true,反之返回false。
strlength
(s):返回串s的元素個數,即串的長度。
strcompare
(s, t)
:若s>t, 返回值》
0,相等返回0,若sconcat
(t, s1, s2)
: 用t返回由s1和s2連線而成的新串。
substring
(sub, s,pos,len)
:串s存在, 1
<=pos<=
strlength
(s),且0
<=len<=
strlength
(s)-pos+
1,用sub返回串s的第pos個字元起長度為len的子串。
index
(s,t,pos)
:串s和t存在,t是非空串,1
<=pos<=
strlength
(s)。若主串s中存在和串t值相同的子串,則返回它在主串s中的第pos個字元之後第一次出現的位置,否則返回0。
replace
(s,t,v)
:串s、t和v,t是非空串。用v替換主串s**現的所有與t相等的不重疊的子串。
strinsert
(s,pos,t)
:串s和t存在,1
<=pos<=
strlength
(s)+
1。在串s的第pos個字元之前插入串t。
strdelete
(s,pos,len)
:串s存在,1
<=pos<=
strlength
(s)-len+
1。從串s中刪除第pos個字元起長度為len的子串。
endadt
**:
目的:計算出當前要匹配的串t的next陣列
void
get_next
(string t,
int*next)
else
j=next[j]
;//若字元不相同,則 j 回溯
}}
匹配演算法:
int
index_kmp
(string s, string t,
int pos)
else
//指標後退重新開始匹配}if
(j > t[0]
)return i-t[0]
;else
return0;
}
改進的演算法:
由於t串中的第2、3、4、5位置的字元都與首位相同,那麼可以用首位next[1]
的值去取代與它相等的字元後續next[j]
的值。
void
get_next
(string t,
int*next)
else
j=nextval[j]
;//若字元不同 則j值回溯。
}}
資料結構與演算法 字串
判斷乙個串是不是回文串,往往要分開編寫,造成 的拖沓 int longestpalindrome const char s,int n return max void longestpalindrome test 上面的迴圈中,對於回文長度本身的奇偶性,我們進行區別處理。這樣有點拖沓。我們根據乙個簡...
資料結構與演算法 字串
生成n對括號的所有合法排列 描述 給定乙個非負整數n,生成n對括號的所有合法排列。解答 該問題解的個數就是卡特蘭數,但是現在不是求個數,而是要將所有合法的括號排列列印出來。該問題和 程式設計之美 的買票找零問題一樣,通過買票找零問題我們可以知道,針對乙個長度為2n的合法排列,第1到2n個位置都滿足如...
資料結構與演算法 字串
題型1 如何統計字元中有多少個單詞?方法1 使用空格作為分隔。如果測出某乙個字元為非空格,而它前面的單詞是空格,則表示 新的單詞開始了 此時單詞數count累加1.如果當前字元為非空格而其前面的字元也是非空格,則意味著仍然是原來那個單詞的繼續,count不應再累加1.方法2 使用sstream中的i...