#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 是表示字串的類 該類的介面與常規容器的介面基本相...