C C 資料結構與演算法 字串)

2021-09-24 12:14:13 字數 2031 閱讀 8440

串(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...