2)空格串:由乙個或多個空格組成的串,空格也是乙個字元。
3)子串:由串中任意長度的連續字元構成的序列,含有子串的串稱為主串。子串在主串中的位置是指子串首次出現時,該子串的第乙個字元在主串中的位置。空串是任意串的子串。
1) 初始化#define max_size 100
typedef struct
string;
int init(string *str)
else
}
2) 判斷空
bool isempty(string* str)
else
}
3)賦值
void strassign(string *str, char ch)
str->length = i;
if (i > max_size)
for (i = 0; i < str->length; i++)
str->ptr[str->length] = '\0';
}
4)連線
void concat(string* s1, char ch)
//判斷總共有多少字元,如果大於最大則重新申請空間,再賦值
int totalsize = s1->length + i;
if (totalsize <= max_size)
s1->ptr[totalsize] = '\0';
} else
s1->ptr[totalsize] = '\0';
}}
(1)布魯特-福斯演算法(bf)從主串的第乙個字元起與模式串的第乙個字元比較,如果相等,則繼續逐一對字串的字元進行後續比較;如果不相等,則從主串第二個字元起與模式串的第乙個字元重新比較,直到模式串中每個字元依次和主串中乙個連續的字串行相等為止,此時匹配成功;否則,匹配失敗。
//從pos開始的位置,查詢模式串t在主串s串中是否存在
int index(char s,char t,int pos)
else
}if(j >= tlen)
return -1;
}
(2)kmp演算法改進之處在於,每當匹配過程**現相比較的字元不相等時,不需要回退主串的字元指標位置,而是利用已經得到的「部分匹配」結果將模式串向右「滑動」盡可能遠的距離,再繼續進行比較。在kmp演算法中,依據模式串的next函式值實現子串的滑動。
模式串aba
babb
下標012
3456
next陣列-10
0123
4 預設next[0] = -1
ab:除去最後乙個字元b,前面a,沒有相同的字首和字尾,則next[1] = 0;
aba:除去最後乙個字元a,前面ab,沒有相同的字首和字尾,則next[2] = 0;
abab:除去最後乙個字元b,前面aba,有相同的字元a ,next[3] = 0 + 1 =1;
ababa:除去最後乙個字元a,前面abab,有相同的字首和字尾ab,next[4] = 0+2 = 2;
ababab:除去最後乙個字元b,前面ababa,有相同的字首和字尾aba,next[5] = 0+3 = 3;
abababb:除去最後乙個字元b,前面ababab,有相同的字首和字尾abab,next[4] = 0+4 = 4;
以下為獲取next函式的演算法:
void get_next(char *p,int next)
else}}
以下為kmp演算法:
//利用模式串p的next函式,從第pos個字元開始,求p在主串s中是否存在
int kmp(char *s,char *p,int pos,int next)
else
}if(j >= plen)
else
}
以下為kmp演算法示意圖:
①第一次匹配從s[0]與p[0]開始,由於s[0]==p[0],s[1]==p[1],s[2]==p[2],比較s[3]和p[3],由於它們不相等,所以第一次匹配結束
②第二次匹配,令j = next[3] = 1,第二次從s[3]與p[1]開始比較,仍不相等,則第二次匹配結束
③第三次匹配,令j = next[1] = 0,第三次從s[3]與p[0]開始比較,仍不相等,則第三次匹配結束
④第四次匹配,令j = next[0] = -1,此時滿足條件「j == -1」,顯然不能令s[3]與p[-1]進行比較,說明主串中從i = 3開始的字串不可能與模式串相等,因此需要將 i 的值遞增後再繼續進行匹配,令i++,j++;
⑤第五次匹配,s[4]與p[0]比較,直到匹配完成
資料結構 串
輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。結果請按字母順序輸出。我們求整個字串的排列,可以看成兩步 首先求所有可能出現在第乙個位置的字元,即把第乙個字元和後面所有的字元交換。第...
資料結構 串
串名 串值 串長 空串 空格串。字串的比較 字串模式匹配演算法 1.簡單字串模式匹配演算法 最簡單實現是用字串p的字元依次與字串t中的字元進行比較。實現思想是,首先將子串p從第0個字元起與主串t的第pos個字元起依次比較對應字元,如全部對應相等,則表明已找到匹配,成功終止。否則將子串p從第0個子串起...
資料結構 串
串 又稱字串 是一種特殊的線性表,它的每個結點僅由乙個字元組成。在早期的程式語言中,串僅在輸入或輸出中以直接量的形式出現,並不參與運算。隨著計算機的發展,串在文字編輯 詞法掃瞄 符號處理以及定理證明等許多領域得到越來越廣泛的應用。在高階語言中開始引入了串變數的概念,如同整型 實型變數一樣,串變數也可...