#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])
, _size(0)
, _capacity(0)
//建構函式
string(const char* str)
拷貝建構函式
//string(const string& str)
// :_str(new char[str._capacity+1])
// ,_size(str._size)
// ,_capacity(str._capacity)
// //拷貝建構函式的現**法:建議這樣寫
string(const string& str)
:_str(nullptr)
, _size(0)
, _capacity(0)
void swap(string& str)
//深拷貝交換:效率低
/*void swap(string& str) */
//賦值運算子
//string& operator=(const string& str)
// return *this;
//}//賦值運算子現**法
//**復用:拷貝構造 (傳值時進行拷貝構造)
string& operator=(string str)
const char* c_str()const
//析構函式
~string()
} char& operator(size_t pos)
const char& operator(size_t pos)const
size_t size() const
void pushback(const char& ch)
//尾插入字元
_str[_size] = ch;
//更新_size
++_size;
//不要忘記更新'\0'
_str[_size] = '\0';
//insert(_size,ch);
} void reverse(size_t n)
} //檢查容量
int len = strlen(str);
if (_size + len > _capacity)
//拷貝內容
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)
size_t end = _size + 1;
//元素向後移動
while (end > pos)
//插入元素
_str[pos] = ch;
//更新
++_size;
} void insert(size_t pos, const char* str)
size_t end = _size + len;
while (end > pos + len - 1)
//插入字串
for (int i = 0; i < len; ++i)
//更新_size
_size += len;
} //調整_size
void resize(size_t n,const char ch = '\0')
if (n > _size)
_size = n;
_str[_size] = '\0';
} void popback()
void earse(size_t pos, size_t len)
else
_size -= len;
}} }
//字串查詢,返回索引
size_t find(const char* str)
else
return npos;
}private:
char* _str;
size_t _size;
size_t _capacity;
public:
static const size_t npos;
};//靜態成員變數類外初始化
const size_t string::npos = -1;
//加法運算子過載:不改變加數
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& operator<<(ostream& cout, const string& str)
void test()
cout << endl;
//範圍for :底層利用迭代器實現
for (const char& ch : str)
cout << endl;
//遍歷
for (int i = 0; i < str.size(); ++i)
cout << endl;
}
模擬實現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語言中要在一串字串的尾部拼接另乙個字串,我們需要做的事情就是定義兩個字串,要使...
String 類的模擬實現
string 類的模擬實現 一 建構函式使用初始化列表的優點 建構函式的執行分為兩個階段 初始化階段和計算階段,初始化階段先於計算階段 賦值語句 在使用建構函式給資料成員進行初始化時通常有兩種選擇。一是在建構函式後加上冒號,並用初始化列表的方式對成員進行初始化。二是在建構函式體中用賦值語句完成對成員...