C string的模擬實現

2021-10-06 22:50:56 字數 3910 閱讀 1812

#define _crt_secure_no_warnings

#include

#include

using

namespace std;

class

string

iterator end()

const_iterator begin()

const

const_iterator end()

const

//預設無參構造

string()

:_str

(new

char[16

])//因為原本得string類預設構造就是15個位元組,所以我們申請16位元組,最後乙個放\0

,_size(0

),_capacity(0

)//有引數呼叫這個建構函式

string

(const

char

* str)

//返回c風格字串,也就是字串首位址

const

char

*c_str()

const

深拷貝構造

//string(const string& str)

// :_str(new char[str._capacity + 1])

// , _size(str._size)

// , _capacity(str._capacity)

//=運算子過載,給它加入深拷貝功能

//string& operator=(const string& str)

//// return *this;

//}//以上的深拷貝構造和現**法的深拷貝構造都可以

//深拷貝構造:現**法, **復用

string

(const string& str)

:_str

(nullptr),

_size(0

),_capacity(0

)void

swap

(string& str)

//賦值運算子: 現**法,深拷貝, **復用: 拷貝構造(傳參進行拷貝構造)

string&

operator

=(string str)

//析構函式

~string()

cout <<

"~string"

<< endl;

}//運算子過載:可讀可寫

char

&operator

(size_t pos)

//運算子過載:可讀不可寫

const

char

&operator

(size_t pos)

const

//獲取字串有效長度_size

size_t size()

const

//尾插乙個字元

void

pushback

(const

char

& ch)

//尾插

_str[_size]

= ch;

++_size;

_str[_size]

='\0';}

//重新開闢空間,只增不減

void

reserve

(size_t n)

}//find函式

size_t find

(const

char

* str)

//尾插字串

void

(const

char

* str)

尾插//strcpy(_str + _size, str);

修改size

//_size += len;

//**復用

insert

(_size, str);}

//+=字元

string&

operator+=

(const

char

& ch)

//+=字串

string&

operator+=

(const

char

* str)

//指定位置插入字元

void

insert

(size_t pos,

const

char

& ch)

//移動元素[pos, _size]: 從後向前移動,首先移動最右端的字元,防止覆蓋

size_t end = _size +1;

//end >= pos: 當pos = 0時, 死迴圈,訪問越界

while

(end > pos)

//插入

_str[pos]

= ch;

++_size;

}//指定位置插入字串

void

insert

(size_t pos,

const

char

* str)

//移動元素[pos, _size]

size_t end = _size + len;

//size --> size + len, pos ---> pos + len

while

(end > pos + len -1)

//插入

for(

int i =

0; i < len;

++i)

_size +

= len;

}//重新設定有效長度的函式

void

resize

(size_t n,

const

char

& ch =

'\0')if

(n > _size)

_size = n;

_str[_size]

='\0';}

//尾刪乙個字元

void

popback()

//刪除函式:從pos開始刪除len個字元

void

erase

(size_t pos, size_t len)

else

_size -

= len;}}

}private

:char

* _str;

size_t _size;

size_t _capacity;

public

:static

const size_t npos;};

const size_t string::npos =-1

;//+string類物件

string operator+(

const string& s,

const string& str)

//+字串

string operator+(

const string& s,

const

char

* str)

//+字元

string operator+(

const string& s,

const

char

& ch)

//《運算子過載:返回值是ostream輸出流是為了可以連續輸出

ostream&

operator

<<

(ostream& cout,

const string& str)

return cout;

}//列印函式

void

printstring

(const string& str)

cout << endl;

}

C string類 模擬實現

define crt secure no warnings include include using namespace std namespace zyf iterator end mystring const char str size strlen str mystring s1 s2 my...

C string類的模擬實現

include include using namespace std class string iterator end const iterator begin const const iterator end const string const char str 字串有 0 也可以寫成 0 ...

C string類介面及模擬實現

c語言中,字串是以 0 結尾的一些字元的集合,為了操作方便,c標準庫中提供了一些str系列的庫函式,但是這些庫函式與字串是分離開的,而且底層空間需要使用者自己管理,稍不留神可能還會越界訪問。c 封裝了這些介面和操作,建立出string類 string 是表示字串的類 該類的介面與常規容器的介面基本相...