三、運算子過載
四、迭代器
五、其他操作
在實現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語言中要在一串字串的尾部拼接另乙個字串,我們需要做的事情就是定義兩個字串,要使...