string類實現
相信大多數面試的人都會遇到這樣的一個問題,在面試時候面試官會給一份筆記題目,裏面內容基本都一些基本知識。實現一個簡單的string類是最常見的。也是檢驗基本知識的最快捷和最有效的方式。
我們知道C++的基本類型有int,bool ,delete,char 等等,字符串(string),如果你是用 C#或者Java,他們都幫你封裝好了,你直接拿來用就OK了。但是C++卻沒有,這時候就需要我們自己封裝一個strong類出來,廢話有的多直接上代碼把。
class String
{
protected:
char * _str; //字符數組
int _size; //字符串長度
public:
String()
{
_str = 0;
_str[0] = 0;
_size = 0;
}
//用char數組構建
String(const char * str)
{
_size = strlen(str);
_str = new char[_size + 1];
strcpy(_str, str);
}
//直接用String類去構建
String(const String & right)
{
_size = right._size;
_str = new char[_size + 1];
strcpy(_str, right._str);
}
String(char * data, int len)
{
_str = data;
_size = len;
}
~String()
{
delete[]_str;
}
void copyto(String & right)
{
delete[]_str;
_size = right._size;
_str = new char[_size + 1];
strcpy(_str, right._str);
}
//字符串“=” 重載 ps == > string x = "a";
void operator = (String & right)
{
delete[]_str;
_size = right._size;
_str = new char[_size + 1];
strcpy(_str, right._str);
}
void operator = (const char * rigth)
{
delete[]_str;
_size = strlen(rigth);;
_str = new char[_size + 1];
strcpy(_str, rigth);
}
void carwith(const String& rigth)
{
char * plen = new char[rigth._size + _size + 1];
strcpy(plen, _str);
strcpy(plen + _size, rigth._str);
delete[]_str;
_str = plen;
_size += rigth._size;
}
//字符串“+=” 重載 ps == > string x += "a";
void operator += (const String& rigth)
{
char * plen = new char[rigth._size + _size + 1];
strcpy(plen, _str);
strcpy(plen + _size, rigth._str);
delete[]_str;
_str = plen;
_size += rigth._size;
}
void operator += (const char* str)
{
int len = strlen(str);
char * plen = new char[len + _size + 1];
strcpy(plen, _str);
strcpy(plen + _size, str);
delete[]_str;
_str = plen;
_size += len;
}
//字符串“+” 重載 ps == > string x += "a" + "b";
String operator + (const String& rigth)
{
char * plen = new char[_size + rigth._size + 1];
strcpy(plen, _str);
strcpy(plen + _size, rigth._str);
//不需要從新new一個對象
return String(plen, _size + rigth._size);
}
//獲取字符串第幾個字符 ps stirng = abc index = 1 返回 ‘b’
char& operator [](int index)
{
return _str[index];
}
}
補充一下,string的本質就是一個一個的字符(char)連在一起,所以char是string最基本的類型,我們對string的所有操作都是對char的操作。