自己实现一个string类
来源:互联网 发布:java final关键字用法 编辑:程序博客网 时间:2024/06/08 14:33
头文件
#pragma once#include <iostream>#include <cstring>using namespace std;class HRString{public:HRString(const char* pstr=NULL);HRString(const HRString& str);HRString& operator=(const HRString& str);~HRString();HRString operator+(const HRString& str) const;HRString& operator+=(const HRString& str);bool operator==(const HRString& str);char& operator[](unsigned int index);friend ostream& operator<<(ostream& os, HRString& str);friend istream& operator>>(istream& is, HRString& str);unsigned short size();const char* c_str() const;private:char* m_str;};
源文件
#include "HRString.h"HRString::~HRString(){delete[] m_str;m_str = NULL;}HRString::HRString(const char* pstr){if (!pstr){m_str = NULL;}else{m_str = new char[strlen(pstr)+1];strcpy(m_str, pstr);}}HRString::HRString(const HRString& str){if (!str.m_str){m_str = NULL;}else{m_str = new char[strlen(str.m_str) + 1];strcpy(m_str, str.m_str);}}/*这里是要重新赋值,因此选判断是否已经赋了要引用的对象。*//*如果不是,则应该先清除当前的对象,然后再重新赋值*/HRString& HRString::operator=(const HRString& str){if (this != &str){delete[] m_str;if (!str.m_str){m_str = NULL;}else{m_str = new char[strlen(str.m_str)+1];strcpy(m_str, str.m_str);}}return *this;}//override //该函数功能主要是临时合并一个字符串对象,然后返回HRString HRString::operator+(const HRString& str) const{HRString tmpString;if (!str.m_str){tmpString = *this;}else if (!m_str){tmpString = str;}else{tmpString.m_str = new char[strlen(m_str) + strlen(str.m_str) + 1];strcpy(tmpString.m_str, m_str);strcat(tmpString.m_str, str.m_str);}return tmpString;}//该函数功能主要是临时合并一个字符串对象,然后赋值给当前对象HRString& HRString::operator+=(const HRString& str){if (!str.m_str){return *this;}else if (!m_str){m_str = new char[strlen(str.m_str)+1];strcpy(m_str, str.m_str);}else{HRString tmpString;tmpString.m_str = new char[strlen(m_str) + strlen(str.m_str) + 1];strcpy(tmpString.m_str, m_str);strcat(tmpString.m_str, str.m_str);m_str = tmpString.m_str;tmpString.m_str = NULL;}return *this;}//判断是否相等bool HRString::operator==(const HRString& str){//如果长度不相同,肯定不相等if (strlen(m_str) != strlen(str.m_str)){return false;}return strcmp(m_str,str.m_str)?false:true;}//支持下标索引操作char& HRString::operator[](unsigned int index){if (index >= 0 && index <strlen(m_str)){return m_str[index];}else{cout << "invalid index:" <<index<< endl;exit(0);}}//友元操作,先输出到标准输出管道,至于标准输出管道常用显示在控制台(也可以是文件)ostream& operator<<(ostream& os, HRString& str){os << str.m_str;return os;}istream& operator>>(istream& is, HRString& str){char tmp[1024] = {0};is >> tmp;//先从标准输入管道中获取数据str.m_str = new char[strlen(tmp)+1];strcpy(str.m_str, tmp);return is;}unsigned short HRString::size(){return strlen(m_str);}const char* HRString::c_str() const{return m_str;}
0 0
- 自己实现一个string类
- 自己实现一个string类
- 自己实现一个String类
- 自己实现一个C++ String 类
- C++实现一个自己的string类
- 自己实现的一个String
- 自己实现String类
- 自己实现String类
- 自己写一个string类
- 自己实现一把String类
- 自己实现的string类
- 自己实现的string类
- 自己实现的String类
- 自己实现string<char>类
- C++面试题(二)——自己实现一个String类
- C++面试题(二)——自己实现一个String类
- 自己实现自己的String.....
- 自己实现的标准C++ string 类
- Dialog的使用方法:常规和自定义
- UVA 11258 String Partition
- 《unix高级环境编程》标准I/O——流操作
- VS2012在添加域服务时找不到EF的问题
- 安全的应用内广播
- 自己实现一个string类
- android apk嵌套 从一个apk启动另外一个apk
- 《unix高级环境编程》系统数据文件和信息——口令文件
- 第九周 项目六 穷举法解决组合问题
- 辣出翔,纯手工制作,辣椒酱中的极品辣出翔辣椒酱
- win7去除快捷方式箭头
- 真机调试那些事
- javascript小练习之进制转换
- 增高专家给您的建议