字串類 KMP演算法的應用

2022-08-18 01:12:13 字數 4106 閱讀 4646

1,字串類中的新功能(本文**已整合到字串類——字串類的建立(上)中,這裡講述函式實現原理):

2,子串查詢(kmp 演算法直接運用):

1,int indexof(const char* s) const;

2,int indexof(const string& s) const;

3,子串查詢成員函式的宣告:

int indexof(const char* ) const;
int indexof(const string& s) const;
4,子串查詢成員函式的定義:

1

int string::indexof(const

char* s) const

//子串查詢,返回下標25

6int string::indexof(const string &s) const

7

3,在字串中將指定的子串刪除:

1,string& remove(const char* s);

2,string& remove(const string& s);

1,根據 kmp 在目標字串中查詢子串的位置;

2,通過子串位置和子串長度進行刪除;

3,刪除指定字串成員函式的宣告:

string& remove(int i, int len);
string& remove(const char* s);
string& remove(const string& s);
4,刪除指定字串成員函式的定義:

1

/*刪除下標 i 處長度為 len 的字串

*/2 string& string::remove(int i, int len) //

和 insert() 返回的是相同的函式,還可

以以字串類繼續訪問,如檢視刪除後的字串等313

14 m_str[n] = '

\0'; //

這裡為什麼是 n,因為n是不斷增加的,直到 m 為等於 length

15 m_length = n; //

不應該是 m_length - n 嗎?16}

1718

return *this;19

}2021 string& string::remove(const

char *s) //

刪除子串

2225

26 string& string::remove(const string &s) //

刪除子串

27

4,字串的減法操作定義(operator - ):

1,使用 remove 實現字串間的減法操作;

1,字串自身不被修改;

2,返回產生的新串;

2,減法操作符過載的宣告:

string operator - (const string& s) const;
string operator - (const char* s) const;
string& operator -= (const string& s);
string& operator -= (const char* s);
3,減法操作符過載的定義:

1 string string::operator - (const string& s) const

//字串自身會被改變25

6 string string::operator - (const

char* s) const

//字串自身會被改變710

11 string& string::operator -= (const string& s) //

字串自生不會被改變

1215

16 string& string::operator -= (const

char*s)

17

5,字串中的子串替換:

1,string& replace(const char* t, const char* s);

2,string& replace(const string& t, const char* s);

3,string& replace(cosnt char* t, const string& s);

4,string& replace(const string& t, const string& s);

5,子串替換成員函式的宣告:

string& replace(const char* t, const char* s);
string& replace(const string& t, const char* s);
string& replace(const char* t, const string& s);
string& replace(const string& t, const string& s);
6,子串替換成員函式的定義:

1

/*用 s 替換字串中的 t

*/2 string& string::replace(const

char* t, const

char*s)311

12return *this;13

}1415 string& string::replace(const string& t, const

char*s)

1619

20 string& string::replace(const

char* t, const string&s)

2124

25 string& string::replace(const string& t, const string&s)

26

6,從字串中建立子串:

1,string sub(int i, int len) const;

1,以 i 為起點去長度為 len 的子串;

2,子串提取不會改變字串本身的狀態;

2,從字串中建立子串成員函式的宣告:

string sub(int i, int len) const; // 因為這裡不會改變當前字串狀態,所以為 const 成員函式;
3,從字串中建立子串成員函式的定義:

1 string string::sub(int i, int len) const

//查詢當前字串中第 i 個位置長度為 len 的字串216

17 str[len] = '\0'

;18 ret = str; //

返回子串

1920

free

(str);21}

22else

2326

27return

ret;

28 }

7,本節課測試**:

1 #include 2 #include "

dtstring.h

"3 #include "

malloc.h

"4 #include 5

6using

namespace

std;

7using

namespace

dtlib;89

intmain()

10

8,小結:

1,字串類是工程開發中必不可少的元件;

2,字串中應該包含常用字串操作函式:

1,增:insert,operator +,...;

1,當前字串增加;

2,刪:remove,operator -,...;

1,當前字串刪除;

3,查: indexof,...

1,當前字串查詢;

4,改:replace,...

1,當前字串更改;

字串 KMP演算法

而kmp演算法在字串匹配方法中乙個很著名並且很聰明的演算法,當然也確實比較難理解。甚至於有程式設計師因為無法理解kmp演算法而直接改用暴力匹配。本身自己學演算法起步較晚,第一次接觸到kmp演算法已經是研究生畢業一年了。雖然帶著研究生的學歷背景,但是剛開始看的時候依然是一臉懵逼。看了很多博主的講解總算...

字串 KMP演算法

而kmp演算法在字串匹配方法中乙個很著名並且很聰明的演算法,當然也確實比較難理解。甚至於有程式設計師因為無法理解kmp演算法而直接改用暴力匹配。本身自己學演算法起步較晚,第一次接觸到kmp演算法已經是研究生畢業一年了。雖然帶著研究生的學歷背景,但是剛開始看的時候依然是一臉懵逼。看了很多博主的講解總算...

字串演算法 KMP演算法

給定字串m和n m比n長 找出n在m中出現的匹配位置。說白了,就是乙個簡單的字串匹配。例如 首先,字串 bbc abcdab abcdabcdabde 的第乙個字元與搜尋詞 abcdabd 的第乙個字元進行比較。因為b與a不匹配,所以搜尋詞後移一位。因為b與a不匹配,搜尋詞再往後移。就這樣,直到字串...