簡單的string類的模擬實現

2021-08-01 15:11:49 字數 3646 閱讀 2439

綜述:c++標準庫提供了乙個字串型別string ,該型別可以直接定義乙個字串物件,並且對字串進行各種操作;以下是本人根據c++標準庫中的string類,簡單的模擬實現該類;

先看cpulspuls中string類的成員函式:

其中我只實現圖中列出函式原型的幾個成員函式:

(1)實現之前先看看這寫函式及其過載函式是什麼意思:

測試**:

三、模擬實現

//模擬實現c++標準庫中的string類

#include

using

namespace

std;

#include

class string

string(const string& s)//拷貝構造

:_capacity(strlen(s._str)+1)

,_sz(s._sz)

,_str(new

char[strlen(s._str)+1])

/*string& operator=(string s)//賦值操作符過載---現**法(不用引用傳參)

return *this;

}~string()//析構

_capacity=0;

_sz=0;

}//類的操作成員函式

public:

void push_back(const

char c);//給物件後面新增乙個字元

char& operator ( size_t pos );//取物件的下標元素

const

char& operator(size_t pos)const;//取字串的下標元素

string& operator+= ( const string& str );//給乙個物件本身追加另乙個物件

string& operator+= ( const

char* s );//給乙個物件本身追加乙個字串

string& operator+= ( char c );//給乙個物件本身追加乙個字元

//以下函式的位置pos1都是從0計數開始

string& insert ( size_t pos1, const string& str );//在乙個字串的pos1位置插入字串str

string& insert ( size_t pos1, const string& str, size_t pos2, size_t n );//在乙個字串的pos1位置插入字串str前n位組成的字串

string& insert ( size_t pos1, const

char* s, size_t n);//在乙個字串的pos1位置插入字串s前n位組成的字串

string& insert ( size_t pos1, const

char* s );//在乙個字串的pos1位置插入字串s

string& insert ( size_t pos1, size_t n, char c );//在乙個字串的pos1位置插入n個字元c

private:

//由於檢查並調整容量,只是在成員函式內部呼叫,所有經該函式定義為私有成員函式,不對外提供介面;體現c++的封裝特性,使該類變得安全

void cheakcapacty(size_t n)//檢查容量,並調整容量

}private:

size_t _capacity;//字串當前的容量

size_t _sz;//字串實際的字元個數(不包含'\0')

char* _str;//字串

};void string::push_back(const

char c)//給字串後面新增乙個字元c

const

char& string::operator(size_t pos)const

//取字串的下標元素

char& string::operator(size_t pos)//取字串的下標元素

string& string::operator+= (const string& str )//給乙個字串本身後面加上乙個字串

string& string::operator+= ( const

char* s )//給乙個字串本身後面加上乙個字串

string& string::operator+=( char c )//給乙個字串本身後面加上乙個字元

string& string::insert ( size_t pos1, const string& str )//從乙個字串的pos位置開始插入字串str

if (pos1>=0&&pos1<=strlen(_str))//'\0'位置也可以插入

return *this;

}string& string::insert ( size_t pos1, const string& str, size_t pos2, size_t n )//在乙個字串的pos1位置插入str字串的pos2位置及其後面的n個字元

if (pos1>=0&&pos1<=strlen(_str)&&pos2>=0&&pos2<=strlen(str._str))

return *this;

}string& string::insert ( size_t pos1, const

char* s, size_t n)//在乙個字串的pos1位置插入字串s前n位組成的字串

if (pos1>=0&&pos1<=strlen(_str))//'\0'位置也可以插入

return *this;

}string& string::insert ( size_t pos1, const

char* s )//在乙個字串的pos1位置插入字串s

if (pos1>=0&&pos1<=strlen(_str))//'\0'位置也可以插入

return *this;

}string& string::insert ( size_t pos1, size_t n, char c )//在乙個字串的pos1位置插入n個字元c

if (pos1>=0&&pos1<=strlen(_str))//'\0'位置也可以插入

strcpy(_str+(pos1+n+1),tmp);

delete tmp;

}return *this;

}ostream& operator

<

int main()

三、模擬實現的測試**和(1)中測試部分**完全相同,執行結果也相同,證明本次模擬達到了c++標準庫的實現要求,模擬正確;

接下來的文章,用物件導向的思想,利用c++語言實現順序表和雙鏈表

String 類的模擬實現

string 類的模擬實現 一 建構函式使用初始化列表的優點 建構函式的執行分為兩個階段 初始化階段和計算階段,初始化階段先於計算階段 賦值語句 在使用建構函式給資料成員進行初始化時通常有兩種選擇。一是在建構函式後加上冒號,並用初始化列表的方式對成員進行初始化。二是在建構函式體中用賦值語句完成對成員...

string類的模擬實現

說明 有些函式返回的是string 引用 有些是string 值 這取決於返回的物件是函式的區域性變數還是全域性變數。string.hpp include include include using namespace std class string string const string s s...

string類的模擬實現

class string 放n個字元ch的元素 構造 string size t n,char ch str new char n 1 size n capacity n 拷貝建構函式 string const string s size s.size capacity s.size 賦值運算子過載...