C++現實簡單的String類

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的操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章