C++语言string类的实现(完整源代码)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
return strcmp(lhs.p_str,rhs.p_str)>=0; }
//子串操作
//返回一个 MyString 类型的字符串,它包含源字符串中从下标 pos 开始的 n 个 字符 MyString MyString::substr(size_t pos,size_t n) {
assert(pos+n<=strLength); MyString ret; ret.strLength = n; ret.p_str = new char[ret.strLength+1]; for (size_t i=0;i!=n;++i)
private: size_t strLength; char* p_str;
};
#endif
MyString.cpp 文件
/*********************************************************** //Copyright (c) 2013 道合|SameIdeal.com All rights reserved. ************************************************************/ #include "MyString.h" #include <cassert>
MyString::MyString(const char* str) {
if(str==NULL) return;
strLength = strlen(str); p_str = new char[strLength+1]; strcpy(p_str,str); }
MyString::MyString(const size_t len,const char ch) {
MyString::MyString():strLength(0),p_str(NULL){}
MyString::MyString(const MyString& str) {
strLength = str.strLength; p_str = new char[strLength+1]; strcpy(p_str,str.p_str); }
return strcmp(lhs.p_str,rhs.p_str)<=0; } bool operator>(const MyString& lhs,const MyString& rhs) {
return strcmp(lhs.p_str,rhs.p_str)>0; } bool operator>=(const MyString& lhs,const MyString& rhs) {
//赋值操作符 MyString& MyString::operator=(const MyString& str) {
if(this!=&str) {
if(strLength<str.strLength) {
delete[] p_str; p_str = new char[str.strLength+1]; } strLength = str.strLength; strcpy(p_str,str.p_str); } return *this; }
strLength = len; p_str = new char[strLength+1]; *(p_str+strLength)='\0'; strset(p_str,ch); }
MyString::~MyString() {
delete[] p_str; }
size_t MyString::length() {
//子串操作 MyString substr(size_t,size_t); //添加操作 MyString& append(const MyString&); //插入操作 MyString& insert(size_t,const MyString&); //替换操作 MyString& assign(const MyString&,size_t,size_t); //删除操作 MyString& erase(size_t,size_t);
class MyString { public:
//构造函数 MyString(); MyString(const MyString&); MyString(const char*); MyString(const size_t,const char); //析构函数 ~MyString(); //属性 size_t length();//字符串的长度 bool empty();//字符串是否为空 const char* c_str();//返回 C 风格字符串的指针 //读写操作符 friend ostream& operator<< (ostream&,const MyString&); friend istream& operator>> (istream&,MyString&); //‘+’操作符 friend MyString operator+(const MyString&,const MyString&); //比较操作符 friend bool operator==(const MyString&,const MyString&); friend bool operator!=(const MyString&,const MyString&); friend bool operator<(const MyString&,const MyString&); friend bool operator<=(const MyString&,const MyString&); friend bool operator>(const MyString&,const MyString&); friend bool operator>=(const MyString&,const MyString&); //下标操作符 char& operator[] (const size_t); const char& operator[] (const size_t)const; //赋值操作符 MyString& operator=(const MyString&); //'+='操作符 MyString& operator+=(const MyString&);
MyString 类完整源代码
MyString.h 文件
/*********************************************************** //Copyright (c) 2013 道合|SameIdeal.com All rights reserved. ************************************************************/ #ifndef MYSTRING_H #define MYSTRING_H #include <iostream> using namespace std;
//'+='操作符
MyString& MyString::operator+=(const MyString& str) {
if(this == &str) {
MyString 百度文库opy(str); return *this+=copy; } strLength += str.strLength; char* p_old = p_str; p_str = new char[strLength+1]; strcpy(p_str,p_old); delete[] p_old; strcat(p_str,str.p_str); return *this; }
//比较操作符 bool operator==(const MyString& lhs,const MyString& rhs) {
return strcmp(lhs.p_str,rhs.p_str)==0; } bool operator!=(const MyString& lhs,const MyString& rhs) {
ret[i]=(*this)[pos+i]; ret[n]='\0'; return ret; } //添加操作 //将一个字符串的副本添加到源字符串的末尾,同“+=”操作符类似 MyString& MyString::append(const MyString& str) { *this+=str; return *this; } //插入操作 //在下标为 pos 的元素之前插入 MyString 对象 str 的副本 MyString& MyString::insert(size_t pos,const MyString& str) { assert(pos<strLength); char* p_old = p_str; strLength +=str.strLength; p_str = new char[strLength+1]; for (size_t i=0;i!=pos;++i)
} return in; } //下标操作符 char& MyString::operator [](const size_t index) { assert(index>=0 && index<=strLength); return p_str[index]; } //下标操作符(const 情况) const char& MyString::operator [](const size_t index)const { assert(index>=0 && index<=strLength); return p_str[index]; }
*(p_str+i) = *(p_old+i); for(size_t i=pos;i!=str.strLength+pos;++i)
if(str.p_str!=NULL) out<<str.p_str;
return out; } //输入操作符 istream& operator>>(istream& in,MyString& str)// {
char temp[100];//临时字符串数组 if(in>>temp) {
delete[] str.p_str; str.strLength = strlen(temp); str.p_str = new char[str.strLength+1]; strcpy(str.p_str,temp);
return strLength; }
bool MyString::empty() {
return strLength==0?true:false; }
const char* MyString::c_str() {
return p_str; } //输出操作符 ostream& operator<< (ostream& out,const MyString& str) {
//'+'操作符的重载 MyString operator+(const MyString& lhs,const MyString& rhs) {
MyString ret; ret.strLength = lhs.strLength + rhs.strLength; ret.p_str = new char[ret.strLength+1]; strcpy(ret.p_str,lhs.p_str); strcat(ret.p_str,rhs.p_str); return ret; }
return strcmp(lhs.p_str,rhs.p_str)!=0; } bool operator<(const MyString& lhs,const MyString& rhs) {
return strcmp(lhs.p_str,rhs.p_str)<0; } bool operator<=(const MyString& lhs,const MyString& rhs) {
相关文档
最新文档