[经典面试题][百度]c++实现STL中的string类
来源:互联网 发布:在澳洲用淘宝 编辑:程序博客网 时间:2024/05/24 07:22
题目
请用c++ 实现stl中的string类,实现构造,拷贝构造,析构,赋值,比较,字符串相加,获取长度及子串等功能。
代码
/*-------------------------------------* 日期:2015-03-31* 作者:SJF0115* 题目: 实现string类* 来源:百度* 博客:------------------------------------*/#include <iostream>#include <cstring>using namespace std;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); // 判断是否字符串相等 bool operator==(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; }//if else{ 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; }//if delete [] 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; }//if delete[] 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]; }//for newStr.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; }//if else{ cout<<str3<<" 和 "<<str4<<" 是不一样的"<<endl; } cout<<str3.substr(6,5)<<" size->"<<str3.substr(6,5).length()<<endl; return 0;}
4 0
- [经典面试题][百度]c++实现STL中的string类
- 模拟实现C++STL中的string类
- String类的实现 -- C++经典面试题
- C++经典面试题之---String类
- C++经典面试题之---String类
- C++经典面试题之---String类
- C++经典面试题之---String类
- 类 String理解和经典面试题,
- 经典C面试题
- C语言常见面试题(经典中的经典)
- c string 面试题
- C++STL常见面试题
- C++STL常见面试题
- C++STL常见面试题
- C++STL常见面试题
- 百度面试题蚂蚁(C#)
- C++面试题:String类的实现
- C++面试题--string类的实现
- Socket通信中中文乱码的问题
- 如何在linux下查看电脑硬件设备属性和各种信息
- MFC小记
- 加班与效率
- python的email模块
- [经典面试题][百度]c++实现STL中的string类
- maven中央仓库镜像
- 李红霞作业第二章第10题
- 正则验证某个字符串是否为某个大写字母
- 背包起步(更新中)
- 第三方活动时间大幅降低收费后
- 最近发现的一个自学网站
- python编程中对错误的处理
- 室内定位(一)开篇