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

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