string 类的实现
2016-06-22 17:10
197 查看
string类的实现,主要包含这几个函数:构造、拷贝构造、析构、赋值、比较、字符串相加、获取长度及子串。
下面是代码:
执行结果:
下面是代码:
#include <iostream> #include <cstring> using namespace std; class String { public: String(const char* str = NULL ); //普通构造函数 String(const String & other); //拷贝构造函数 ~String(void); //析构函数 String& operator = (const String& other); //赋值函数 String operator+(const String& other); bool operator==(const String& other); //判断字符串是否相等 int length(); //字符串长度 String substr(int start, int n); //取子串 friend ostream& operator<< (ostream& o, const String& other); private: char *m_data; int size; }; String::String(const char *str) { if(str == NULL) { m_data = new char[1]; *m_data = '\0'; } else { size = strlen(str); m_data = new char[size+1]; strcpy(m_data,str); } } String::String(const String& other) { size = other.size; m_data = new char[other.size+1]; strcpy(m_data, other.m_data); } String::~String(void) { delete [] m_data; } String& String::operator=(const String& other) { if(this == &other) //这里检查是否自赋值 return *this; delete [] m_data; size = other.size; m_data = new char[size+1]; strcpy(m_data,other.m_data); return *this; //返回当前对象 } String String::operator+(const String& other) { String newStr; delete [] newStr.m_data; newStr.size = size+other.size; newStr.m_data = new char[newStr.size+1]; strcpy(newStr.m_data,m_data); strcpy(newStr.m_data+size,other.m_data); return newStr; } bool String::operator==(const String& other) { return strcmp(m_data,other.m_data) == 0; } int String::length() { return size; } String String::substr(int start, int n) { String newStr; delete [] newStr.m_data; newStr.m_data = new char[n+1]; for(int i = 0; i < n; ++i) newStr.m_data[i] = m_data[start+i]; newStr.m_data = '\0'; newStr.size = n; return newStr; } ostream& operator<< (ostream& o, const String& other) { o<<other.m_data; return o; } int main() { String str1("hello"); String str2("world"); String str3(str2); String str4 = str1+str2; cout <<"str1->" << str1<< " size->" <<str1.length()<< endl; cout <<"str4->" << str4 << " size->" << str4.length()<< endl; String str5("helloworld"); if(str4 == str5) cout << "str4 the same as str5" << endl; else cout << "str4 is not the same as str5" << endl; cout << str4.substr(6,5)<< " size->" << str4.substr(6,5).length()<<endl; return 0; }
执行结果:
相关文章推荐
- JAVA书籍TOP10(转)
- 基于51单片机的74HC164驱动六位数码管动态显示程序
- 安卓图表引擎AChartEngine(一) - 简介
- UI控件之SeekBar(拖动条)
- TCP协议详解---上
- MyBatis中的resultType和resultMap
- php header 设置文件下载
- oracle 断电启动失败:ORA-00600: internal error code, arguments
- redis管理工具——Redis Desktop Manager
- 学习总结-Active Directory 域服务管理10-信任管理
- leetcode:Longest Substring Without Repeating Characters
- 深度学习之(十一)Deep learning中的优化方法:随机梯度下降、受限的BFGS、共轭梯度法
- html中a标签点击去掉高亮背景
- 解决 - java.lang.OutOfMemoryError: unable to create new native thread
- nginx按天切割日志
- <!DOCTYPE> DTD基础
- asp.net与asp.net 优缺点
- 信息检索(IR)的评价指标介绍 - 准确率、召回率、F1、mAP、ROC、AUC
- ace tree使用小记
- voip相关书籍