C 模擬實現string(現代簡易深拷貝寫法)

2021-08-27 08:37:39 字數 2266 閱讀 2530

具體關於string函式寫時注意,看注釋哦

#include

#include

using

namespace

std;

class string

// s1.swap(s2);兩個物件內容交換

void swap(string& s)

// string s2(s1) ;拷貝建構函式

string(const string& s)

:_str(null),

_size(strlen(s._str)),

_capacity(strlen(s._str))

// s1 = s2 ;賦值運算子過載

string& operator=(string s)

~string()

const

char* c_str()

//擴容

void expand(size_t n)

//後面新增資料

void pushback(char ch)

_str[_size++] = ch;

_str[_size] = '\0';

}void pushback(const

char* str)

strcpy((_str + _size), str);

_size += strlen(str);

}//string 進行的是開空間,但是是不會pop的時候,減空間

void popback()

//中間插入,我利用的是memmove庫函式,來完成佔位的後移

void insert(size_t pos, char ch)

assert(pos >= 0 && pos <= _size);

memmove(_str + pos+1, _str + pos,_size - pos+1);

_str[pos] = ch;

_size++;

}void insert(size_t pos, const

char* str)

assert(pos >= 0 && pos <= _size);

memmove(_str + pos + strlen(str), _str + pos,_size - pos+1);

strncpy(_str + pos, str, strlen(str));

_size += strlen(str);

}//pos位置的刪除,我同意利用的庫函式,實現前移,然後修改size大小

void erase(size_t pos, size_t n = 1)

//查詢

size_t find(char ch)

return -1;

}// s1 + 'a' ;+運算子過載+是很浪費空間的,因為在傳回時只能傳值傳回,而+=可以傳引用

string operator+(char ch)

//+=運算子過載

string& operator+=(char ch)

string operator+(const

char* str)

string& operator+=(const

char* str)

//比較大小的不需要每個都實現,可以復用,只實現幾個,其他的利用就好了。

bool

operator>(const string& s)

bool

operator>=(const string& s)

bool

operator

<(const string& s)

bool

operator

<=(const string& s)

bool

operator==(const string& s)

bool

operator!=(const string& s)

//輸出運算子因為stream需要占用第乙個引數,所以不可以寫成成員變數,但是又要訪問類中私有成員,所以應設為friend友元。

friend ostream& operator

<<(ostream& cout, const string&s);

private:

char* _str;

size_t _size;

size_t _capacity;

};ostream & operator

<<(ostream &cout, const string&s)

模擬實現string類 c

include include using namespace std class string string const string m 拷貝建構函式 string 析構函式 string operator string m1 賦值運算子過載 s new char strlen m1.s 1 s...

模擬實現String類(C )

以下就是string類的模擬實現 測試環境為vs2013 define crt secure no warnings 1 include include include using namespace std class string 拷貝建構函式 string const string s str...

string的模擬實現 String

三 運算子過載 四 迭代器 五 其他操作 在實現string類之前,我們需要知道string是表示字串的字串類 string類的成員變數如下 庫中存在string類,所以命名為string會造成衝突,所以我們定義乙個string類去實現string類的各種功能 class string string...