綜述: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 賦值運算子過載...