MyString 类完整源代码
MyString.h 文件
/***********************************************************
//Copyright (c) 2013 道合|SameIdeal.com All rights reserved.
************************************************************/
#ifndef MYSTRING_H
#define MYSTRING_H
#include
using namespace std;
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 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);
private:
size_t strLength;
char* p_str;
};
#endif
MyString.cpp 文件
/***********************************************************
//Copyright (c) 2013 道合|SameIdeal.com All rights reserved.
************************************************************/
#include "MyString.h"
#include
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);
}
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)
{
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()
{
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)
{
if(str.p_str!=NULL)
out<>(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 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];
}
//'+'操作符的重载
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;
}
//赋值操作符
MyString& MyString::operator=(const MyString& str)
{
if(this!=&str)
{
if(strLength(const MyString& lhs,const MyString& rhs)
{
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;
}
//子串操作
//返回一个 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)
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
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
在 道合|sameideal.com
欢迎大家访问我的独立技术博客~