博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[经典面试题][百度]c++实现STL中的string类
阅读量:7089 次
发布时间:2019-06-28

本文共 2561 字,大约阅读时间需要 8 分钟。

题目

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

代码

/*-------------------------------------*   日期:2015-03-31*   作者:SJF0115*   题目: 实现string类*   来源:百度*   博客:------------------------------------*/#include 
#include
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<
"<
<<" size->"<
<
"<
<<" size->"<
<
"<
<<" size->"<
<
"<
<

转载地址:http://ymbql.baihongyu.com/

你可能感兴趣的文章
J2EE 之二------------------- Servlet
查看>>
python argparse
查看>>
美团客户端响应式框架 EasyReact 开源啦
查看>>
前有BAT,后出独角兽,第二梯队很焦虑
查看>>
煲仔饭与软件测试
查看>>
ORACLE同义词总结
查看>>
在linux下安装android以及C/C++开发环境
查看>>
分享:【视频:淘宝手机生活节测试分享】
查看>>
idea maven 新建多模块项目
查看>>
Sqlserver 过期
查看>>
vs2013新建文件自动保存为utf-8编码
查看>>
用系统命令加载磁盘 (隐藏文件) "学习资料"放的再深也不怕
查看>>
mysql忘记没密码
查看>>
nsq服务器安装使用与golang客户端使用
查看>>
kubernetes1.5新特性(二):支持Photon卷插件
查看>>
Navicat 10 for MySQL 注册码
查看>>
单例模式 事例操作 最喜欢枚举类型单例模式
查看>>
记录一次linux线上服务器被黑事件
查看>>
gitlab ssh key
查看>>
Java记录 -81- EnumSet和EnumMap
查看>>