string的模擬實現

2021-10-05 15:29:38 字數 3101 閱讀 1238

#pragma once

#include

#include

using

namespace std;

#include

//不用用free釋放一段堆空間兩次。因為可能釋放完第一次後,作業系統把這塊記憶體分配出去了,立即有釋放會導致問題

//建立乙個類,編譯器會預設生成六個函式

//對空指標的解引用會照成異常。

namespace leb

typedef

char

* iterator;

typedef

const

char

* const_iterator;

iterator begin()

const_iterator begin()

const

iterator end()

const_iterator end()

const

string

(const

char

* str ="")

:m_str

(new

char

[strlen

(str)+1

])// 深拷貝。 淺拷貝會造成重複釋放,有問題。

string

(const string & s)

:m_str

(new

char

[s.m_capacity]),

m_size

(s.m_size)

,m_capacity

(s.m_capacity)

string&

operator=(

const string & s)

return

*this;}

size_t size()

size_t capacity()

//返回 c風格字串。

const

char

*c_str()

const

//過載 運算子。

char

&operator

(size_t pos)

~string()

}void

resize

(size_t size)

}void

reserve

(size_t n)

void

push_back

(char ch)

m_str[m_size]

= ch;

m_size++

; m_str[m_size]

='\0';}

bool

empty()

else

}void

pop_back()

}void

(const

char

* str)

for(

int i =

0; i < len; i++)}

const string &

operator+=

(char ch)

string &

operator+=

(const

char

* str)

//實現find (char ch ,int pos) ;

size_t find

(char ch,

int pos =0)

//找不為空。

char

*tmp =

strchr

(m_str + pos, ch);if

(tmp)

return-1

;}size_t find

(const

char

* str,

int pos =0)

const

char

* tmp =

strstr

(str + pos, str);if

(tmp)

return-1

;}size_t find

(const string&s,

int pos =0)

char

* tmp =

strstr

(m_str + pos, s.

c_str()

);if(tmp)

return-1

;}string substr

(size_t pos, size_t num)

bool

operator

>

(const string& s)

const

else

if(m_str[i]

< s.m_str[i])}

return m_size > s.m_size;

}/*bool operator == (const char *str)const */

bool

operator==(

const

char

* str)

const

return

false;}

friend ostream &

operator

<<

(ostream & s,

const string & ss)

;friend istream &

operator

>>

(istream & s, string & ss)

;private

:char

* m_str;

size_t m_size;

//大小

size_t m_capacity;

//容量、};

ostream &

operator

<<

(ostream & s,

const string & ss)

istream &

operator

>>

(istream & s, string & ss)

}

string的模擬實現 String

三 運算子過載 四 迭代器 五 其他操作 在實現string類之前,我們需要知道string是表示字串的字串類 string類的成員變數如下 庫中存在string類,所以命名為string會造成衝突,所以我們定義乙個string類去實現string類的各種功能 class string string...

模擬實現string類

include using namespace std include class string string string a 2 為什麼要用 優點在哪 string void print string operator const string a string operator const s...

模擬實現string類

在c 中,string其實就是將字串封裝起來的類,呼叫類中的成員函式可以完成對類內的字串進行增刪查改,並且將操作符過載,可以更直觀的操作字串,省去了c語言中很多麻煩的操作,有現成的成員函式供我們使用。舉乙個簡單的例子 在c語言中要在一串字串的尾部拼接另乙個字串,我們需要做的事情就是定義兩個字串,要使...