模擬實現string類

2021-08-21 20:36:50 字數 3302 閱讀 3315

在c++中,string其實就是將字串封裝起來的類,呼叫類中的成員函式可以完成對類內的字串進行增刪查改,並且將操作符過載,可以更直觀的操作字串,省去了c語言中很多麻煩的操作,有現成的成員函式供我們使用。

舉乙個簡單的例子:在c語言中要在一串字串的尾部拼接另乙個字串,我們需要做的事情就是定義兩個字串,要使用malloc,然後自己書寫拼接邏輯。而在c++中只需要構造出lian兩個string物件s1,s2, 使用 s1+=s2,就可以使s2拼接到s1的後面,我們不用關心底層怎麼實現,不用寫拼接邏輯,並且**更加直觀。

string.h 

#include #include #include #include class string

// s1.swap(s2);

void swap(string& s);

// string s2(s1)

string(const string& s)

:_size(s._size)

,_capacity(_size + 1)

// s1 = s2

string& operator=(string s);

~string()

}void show();

const char* c_str(); //獲取string類中的c風格字串

void expand(size_t n); //擴容

void pushback(char ch); //尾部插入乙個字元

void pushback(const char* str); //尾部插入乙個字串

void popback(); //尾部刪除乙個字元

void insert(size_t pos, char ch); //在pos位置插入乙個字元

void insert(size_t pos, const char* str); //在pos位置插入乙個字串

void erase(size_t pos, size_t n = 1); //在pos位置刪除n個字串

size_t find(char ch); //返回string物件中第一次出現ch的下標

size_t find(const char* str); // //返回string物件中第一次出現str的下標

// 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);

private:

char* _str;

size_t _size;

size_t _capacity;

};

#include "string.h"

using namespace std;

void string::show()

for(int i = (int)_size; i > (int)pos; i--)

_str[pos] = ch;

++_size;

}void string::insert(size_t pos, const char* str)

if(_capacity < (_size + size))

for(int i = (int)_size; i >= (int)pos; --i)

int i = 0;

while(*(str+i) != '\0')

_size += size;

}void string::popback()

void string::erase(size_t pos, size_t n)

if(n == 0)

assert(pos <= _size);

while((pos + n) <= _capacity)

if(((int)_size - (int)n) > 0) else

_str[_size] = 0;

}size_t string::find(char ch)

}return (size_t)-1;

}size_t string::find(const char* str)

_fast++, cur++;

}if(*cur == '\0')

}_slow++;

cur = str;

}return (size_t) -1;

}string string::operator+(char ch)

string& string::operator+=(char ch)

string string::operator+(const char* str)

string& string::operator+=(const char* str)

bool string::operator>(const string& s)

if(*_tmp > *tmp)

return false;

}bool string::operator>=(const string& s)

return false;

}bool string::operator<(const string& s)

if(*_tmp < *tmp)

return false;

}bool string::operator<=(const string& s)

return false;

}bool string::operator==(const string& s)

_tmp++, tmp++;

}return false;

}bool string::operator!=(const string& s)

return false;

}void test()

int main()

模擬實現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類模擬實現

define crt secure no warnings include include using namespace std class string iterator end const iterator begin const const iterator end const 無參建構函式...

String 類的模擬實現

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