C++有了string类使得操作字符串变得很方便。有关string类,面试过程中也经常问到的就是自己实现一个sring类。下边实现个String类供大家参考:

String.h

#pragma once
class String
{
public:
//构造函数
String(const char* str = nullptr); //拷贝构造函数
String(const String & another); //析构函数
~String(); //获得长度
int size(); //转换成char*
char* c_str(); //运算符重载=
String& operator=(const String &str); //运算符重载+
String operator+(const String &str) const; //运算符重载==
bool operator==(const String &str); //运算符重载
char& operator[](int index); private:
char* _str;
int len;
};

String.cpp

#include "String.h"
#include <string.h> //构造函数
String::String(const char* str)
{
if (str)
{
len = strlen(str);
_str = new char[len + 1];
strcpy_s(_str, len + 1, str);
}
else
{
len = 0;
_str = new char[1]{ 0 };
}
} //拷贝构造函数
String::String(const String & another)
{
_str = new char[another.len + 1];
strcpy_s(_str, another.len + 1, another._str);
len = another.len;
} //析构函数
String::~String()
{
if (_str)
{
delete[] _str;
_str = NULL;
}
} //获取长度
int String::size()
{
return len;
} //转换成char*
char* String::c_str()
{
return _str;
} //运算符重载=
String& String::operator=(const String &str)
{
if (this == &str)
{
return *this;
}
delete[] _str;
_str = new char[str.len + 1]{ 0 };
strcpy_s(_str, str.len + 1, str._str);
return *this;
} //运算符重载+
String String::operator+(const String &str) const
{
String newString;
newString.len = len + str.len;
newString._str = new char[newString.len + 1];
strcpy(newString._str, _str);
strcat(newString._str, str._str);
return newString;
} //运算符重载==
bool String::operator==(const String &str)
{
if (strcmp(_str, str._str) == 0)
{
return true;
}
else
{
return false;
}
} //运算符重载[]
char& String::operator[](int index)
{
if (index < len)
{
return _str[index];
}
else
{
return _str[len - 1];
}
}

测试:

int main()
{
String str1("wangpengfei"); //有参构造函数测试
String str2(str1); //拷贝构造函数测试 String str3 = "wanghongyan";
String str4 = " wangchouhou";
String str5 = str3 + str4; //重载运算符+测试
cout << str3[0] << endl; //重载运算符[]测试
String str6 = "wanghongyan";
if (str6 == str3) //重载运算符==测试
{
cout << "str3 str6相等" << endl;
} cout << str3.size() << endl;//成员函数size()测试
cout << str3.c_str() << endl;//成员函数c_str()测试 getchar();
}

最新文章

  1. 【代码笔记】iOS-由身份证号码返回性别
  2. Bootstrap框架(基础篇)之列表,表格,表单
  3. Lattice 的 Framebuffer IP核使用调试笔记之IP核生成与参数设置
  4. C++ string到底是什么
  5. mfc 在VC的两个对话框类中传递参数的三种方法
  6. Mac必装app-持续更新
  7. ubuntu 安装 Tomcat
  8. CSS3 Media Queries
  9. JS 数组的基础知识
  10. Uva 10305 - Ordering Tasks 拓扑排序基础水题 队列和dfs实现
  11. 如何在Sql2008中获取表字段属性和注释?
  12. 真机调试报错:Could not find Developer Disk Image 或 Could not locate device support files.
  13. 事务Isolation Level 例子详解
  14. (原)mkl的cblas_sgemm和cblas_dgemm
  15. No1_3.数组初始化_Java学习笔记
  16. #event.initMouseEvent
  17. 使用deb 打包开发的postgres extension 另外一种方法
  18. UI5-学习篇-14-基于BSP应用部署Fiori Launchpad
  19. metadata信息的采集
  20. 为什么你的session不见了

热门文章

  1. window对象方法(alert-confirm-prompt)
  2. idea中properties配置文件 注释显示中文乱码问题
  3. 持续集成学习11 jenkins和gitlab集成自动触发
  4. jsDOM分享1
  5. Hdu 5093 Battle Ship
  6. 18年今日头条笔试第一题题解:球迷(fans)
  7. Mybatis 面试题
  8. [C++] inline内联函数使用方法
  9. 从阿里云DATAV GeoAtlas接口抽取行政区划数据
  10. Wordpress 获取 custom post type 的当前文章 分类信息