string的模擬實現 String

2021-10-10 13:51:17 字數 4465 閱讀 6374

三、運算子過載

四、迭代器

五、其他操作

在實現string類之前,我們需要知道string是表示字串的字串類 ,string類的成員變數如下(庫中存在string類,所以命名為string會造成衝突,所以我們定義乙個string類去實現string類的各種功能):

class

string

;

string

(const

char

* str ="")

~

string()

}

//1.一般寫法

string

(const string& s)

//2.現**法

string

(const string& s)

:_str

(nullptr),

_size

(s._size)

,_capacity

(s._capacity)

void

clear()

//一般寫法

string&

operator=(

const string &s)

//現**法

string&

operator

=(string s)

//《運算子

bool

operator

<

(const string& s)

size_t num =0;

while

(i&&c)

else

if(_str[num]

>s._str[num]

)else}if

(i ==

0&&c!=0)

return

false;}

//==運算子

bool

operator==(

const string& s)

i--; c--

; num++;}

if(c || i)

return

true;}

//<=運算子

bool

operator

<=

(const string& s)

//>運算子

bool

operator

>

(const string& s)

//>=運算子

bool

operator

>=

(const string& s)

//!=運算子

bool

operator!=(

const string& s)

//+=字元運算子

string&

operator+=

(char c)

//+=字串運算子

string&

operator+=

(const

char

* str)

//運算子

char

&operator

(size_t index)

const

char

&operator

(size_t index)

const

typedef

char

* iterator

iterator begin()

iterator end()

typedef

const

char

* const_iterator;

const_iterator begin()

const

const_iterator end()

const

//容量擴容

void

reserve

(size_t newcapacity)

}//大小擴容

void

resize

(size_t newsize,

char c =

'\0')if

(newsize > _size)

} _size = newsize;

_str[_size]

='\0'

;}

// 在pos位置上插入字元c/字串str,並返回該字元的位置

string&

insert

(size_t pos,

char c)

size_t it =_size;

while

(it != pos)

_str[pos]

= c;

_size++

; _str[_size]

='\0'

;return*(

this

+pos);}

string&

insert

(size_t pos,

const

char

* str)

size_t l =

strlen

(str)

; size_t it = _size;

while

(it !=pos)

size_t p = pos;

size_t i =0;

while

(i < l)

_size +

= l;

_str[_size]

='\0'

;return*(

this

+pos);}

//尾插乙個字元

void

pushback

(char c)

_str[_size++

]= c;

_str[_size]

='\0';}

//尾插字串

void

(const

char

* str)

for(size_t i =

0; i <

strlen

(str)

; i++)}

//刪除pos位置上的元素

string&

erase

(size_t pos, size_t len)

_size-

=len;

_str[_size]

='\0'

;return*(

this

+pos)

;}

//返回字元c在string中第一次出現的位置

size_t find

(char c, size_t pos =0)

const

pos++;}

return-1

;}//返回子串s在string中第一次出現的位置

size_t find

(const

char

* s, size_t pos =0)

const

if(s[i]

=='\0')if

(_str[pos]

=='\0'

) pos = c_pos+1;

i =0;

}return-1

;}

//交換物件

void

swap

(string& s)

//字串首位址

const

char

*c_str()

const

//大小

size_t size()

const

//容量

size_t capacity()

const

//判空

bool

empty()

const

class

string

ostream&

operator

<<

(ostream& _cout,

const string& s)

istream&

operator

>>

(istream& _cin, string& s)

關於string的常用介面的實現基本結束,還有部分少見介面,讀者可以自行實現。

string的模擬實現

pragma once include include using namespace std include 不用用free釋放一段堆空間兩次。因為可能釋放完第一次後,作業系統把這塊記憶體分配出去了,立即有釋放會導致問題 建立乙個類,編譯器會預設生成六個函式 對空指標的解引用會照成異常。names...

模擬實現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語言中要在一串字串的尾部拼接另乙個字串,我們需要做的事情就是定義兩個字串,要使...