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