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