一、作业
1、代码
#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
class Mystring
{
public:
//无参构造
Mystring():size(128),len(0)
{
str = new char[size];
cout<<"无参构造完成"<<endl;
}
//有参构造
Mystring(const char *s):size(128),len(0)
{
this->str = new char[size];
strcpy(str,s);
len=strlen(str);
cout<<"有参构造完成"<<endl;
}
//析构函数
~Mystring()
{
clear(); //释放指针的空间
cout<<"析构函数"<<endl;
}
//operator=,赋值函数
Mystring &operator=(const char* s)
{
strcpy(this->str,s);
this->len = strlen(s);
return *this;
}
//at函数
char at(int n)
{
return str[n];
}
//operator[],访问指定字符
char operator[](int n)
{
return str[n];
}
//data函数,返回指向字符串首字符的指针
char* data()
{
return &str[0];
}
//c_str函数
string c_str()
{
return str;
}
//判空函数
bool empty()
{
if(this->str==NULL)
{
return true;
}
return false;
}
//size函数
int mysize()
{
return len;
}
//length函数
int length()
{
return len;
}
//capacity函数
int capacity()
{
return size;
}
//clear函数
void clear()
{
delete str;
}
//push_back函数
void push_back(const char s)
{
str[len]=s;
len++;
}
//pop_back函数
void pop_back()
{
this->str[len-1]=0;
len--;
}
//operator+=
Mystring &operator+=(const Mystring &s)
{
this->len =this->len+s.len;
strcat(this->str,s.str);
return *this;
}
//operator+
const Mystring operator+(const Mystring &s)const
{
Mystring temp;
temp.len=this->len+s.len;
temp.str = strcat(this->str,s.str);
return temp;
}
//operator==
bool operator==(const Mystring &s)const
{
return strcmp(this->str,s.str);
}
//operator!=
bool operator!=(const Mystring &s)const
{
return ~strcmp(this->str,s.str);
}
//operator<
bool operator<(const Mystring &s)const
{
int num = strcmp(this->str,s.str);
if(num<0)
{return 1;}
return 0;
}
//operator>
bool operator>(const Mystring &s)const
{
int num = strcmp(this->str,s.str);
if(num>0)
{return 1;}
return 0;
}
//operator>=
bool operator>=(const Mystring &s)const
{
int num = strcmp(this->str,s.str);
if(num>=0)
{return 1;}
return 0;
}
//operator<=
bool operator<=(const Mystring &s)const
{
int num = strcmp(this->str,s.str);
if(num<=0)
{return 1;}
return 0;
}
//operator<<
friend ostream & operator<<(ostream &L,const Mystring &R);
//operator>>
friend istream & operator>>(istream &L,Mystring &R);
void show()
{
cout<<str<<endl;
cout<<len<<endl;
cout<<size<<endl;
}
private:
char *str; //记录c风格的字符串
int size ; //记录字符串的实际长度
int len; //记录字符串的实际长度
};
//operator<<
ostream & operator<<(ostream &L,const Mystring &R)
{
L<<R.str<<endl;
return L;
}
//operator>>
istream & operator>>(istream &L,Mystring &R)
{
L>>R.str;
R.len=(int)strlen(R.str);
return L;
}
int main()
{
Mystring s1; //无参构造
Mystring s2; //无参构造
cin>>s1; //输入函数
s2=s1; //赋值函数
cout<<s2; //输出函数
Mystring s3("hello"); //无参构造
s3+=s2;
cout<<s3;
cout<<(s3>s2)<<endl; //关系运算符验证
Mystring s4 = (s2+s3);//算术运算符验证
cout<<s4;
return 0;
}
2、运行结果
二、思维导图