[经典面试题][百度]c++实现STL中的string类

题目

请用c++ 实现stl中的string类,实现构造,拷贝构造,析构,赋值,,比较,字符串相加,获取长度及子串等功能。

代码

/*————————————-* 日期:2015-03-31* 作者:SJF0115* 题目: 实现string类* 来源:百度* 博客:————————————*/;class String{public:// 默认构造函数String(const char* str = NULL);// 复制构造函数String(const String &str);// 析构函数~String();// 字符串连接String operator+(const String & str);// 字符串赋值String & operator=(const String &str);// 字符串赋值String & operator=(const char* str);==(const String &str);// 获取字符串长度int length();// 求子字符串[start,start+n-1]String substr(int start, int n);// 重载输出friend ostream & operator<<(ostream &o,const String &str);private:char* data;int size;};// 构造函数String::String(const char *str){if(str == NULL){data = new char[1];data[0] = ‘\0’;size = 0;}//ifelse{size = strlen(str);data = new char[size+1];strcpy(data,str);}//else}// 复制构造函数String::String(const String &str){size = str.size;data = new char[size+1];strcpy(data,str.data);}// 析构函数String::~String(){delete[] data;}// 字符串连接String String::operator+(const String &str){String newStr;//释放原有空间delete[] newStr.data;newStr.size = size + str.size;newStr.data = new char[newStr.size+1];strcpy(newStr.data,data);strcpy(newStr.data+size,str.data);return newStr;}// 字符串赋值String & String::operator=(const String &str){if(data == str.data){return *this;}//ifdelete [] data;size = str.size;data = new char[size+1];strcpy(data,str.data);return *this;}// 字符串赋值String& String::operator=(const char* str){if(data == str){return *this;}//ifdelete[] data;size = strlen(str);data = new char[size+1];strcpy(data,str);return *this;}// 判断是否字符串相等bool String::operator==(const String &str){return strcmp(data,str.data) == 0;}// 获取字符串长度int String::length(){return size;}// 求子字符串[start,start+n-1]String String::substr(int start, int n){String newStr;// 释放原有内存delete [] newStr.data;// 重新申请内存newStr.data = new char[n+1];for(int i = 0;i < n;++i){newStr.data[i] = data[start+i];}//fornewStr.data[n] = ‘\0’;newStr.size = n;return newStr;}// 重载输出ostream & operator<<(ostream &o, const String &str){o<<str.data;return o;}int main(){String str1(“hello “);String str2 = “world”;String str3 = str1 + str2;cout<<“str1->”<<str1<<” size->”<<str1.length()<<endl;cout<<“str2->”<<str2<<” size->”<<str2.length()<<endl;cout<<“str3->”<<str3<<” size->”<<str3.length()<<endl;String str4(“helloworld”);if(str3 == str4){cout<<str3<<” 和 “<<str4<<” 是一样的”<<endl;}//ifelse{cout<<str3<<” 和 “<<str4<<” 是不一样的”<<endl;}cout<<str3.substr(6,5)<<” size->”<<str3.substr(6,5).length()<<endl;return 0;}

最快乐的时候,就是去旅行。

[经典面试题][百度]c++实现STL中的string类

相关文章:

你感兴趣的文章:

标签云: