
展开全部
串类堆分配储存表示~
class HString
{
protected:
char *strval;//存放串值
int slen;//串长
public:
HString();
~HString();
HString(const HString &s1);//复制构造函数
HString(const char *str);
int Length() const {return slen;}
void operator=(const HString&s1);//赋值操作重载
const char *get_strval() const;//取串值
HString &Concat(const HString&s1,const HString &s2);
int Index(const HString &p);//求串p在当前串中第一次出现位置
int Compare(const HString &s1,const HString &s2);
friend bool operator==(const HString &s1,const HString &s2);//判断是否s1==s2;
friend bool operator<(const HString &s1,const HString &s2);
friend bool operator>(const HString &s1,const HString &s2);
friend bool operator<=(const HString &s1,const HString &s2);
friend bool operator>=(const HString &s1,const HString &s2);
friend bool operator!=(const HString &s1,const HString &s2);
char &operator[](int i)
{
if(i<0||i>=slen)exit(1);
return strval[i];
}
};
HString::HString()
{
slen=0;
strval=NULL;
}
HString::~HString()
{
delete []strval;
slen=0;
}
HString::HString(const char *str)
{
slen=strlen(str);
strval=new char[slen+1];
strcpy(strval,str);
}
HString::HString(const HString &s1)
{
slen=s1.Length();
strval=new char[slen+1];
strcpy( strval,s1.get_strval() );
}
void HString::operator =(const HString &s1)
{
delete[]strval;
slen=s1.Length();
strval=new char[slen+1];
strcpy(strval,s1.strval);
}
const char* HString::get_strval() const
{
return (const char * )strval;
}
HString & HString::Concat(const HString &s1, const HString &s2)
{
const char *cstr1=s1.get_strval(),*cstr2=s2.get_strval();
delete[]strval;
if (cstr1==NULL||cstr2==NULL)
{
exit(1);
}
else
{
strval=new char[s1.Length()+s2.Length()+1];
strcpy(strval,cstr1);
strcat(strval,cstr2);
slen=s1.Length()+s2.Length();
return *this;
}
}
int HString::Index(const HString &p)
{
const char *pval=p.get_strval();
char *ptr=strstr(strval,pval);
if(ptr==NULL)
return -1;
else
return (ptr-strval);
}
int HString::Compare(const HString &s1, const HString &s2)
{
return strcmp( s1.get_strval() , s2.get_strval() );
}
bool operator ==(const HString &s1, const HString &s2)
{
return strcmp( s1.get_strval() , s2.get_strval() )==0;
}
bool operator <(const HString &s1, const HString &s2)
{
return strcmp( s1.get_strval() , s2.get_strval() )<0;
}
bool operator >(const HString &s1, const HString &s2)
{
return strcmp( s1.get_strval() , s2.get_strval() )>0;
}
bool operator <=(const HString &s1, const HString &s2)
{
return strcmp( s1.get_strval() , s2.get_strval() )<=0;
}
bool operator >=(const HString &s1, const HString &s2)
{
return strcmp( s1.get_strval() , s2.get_strval() )>=0;
}
bool operator !=(const HString &s1, const HString &s2)
{
return strcmp( s1.get_strval() , s2.get_strval() )!=0;
}
class HString
{
protected:
char *strval;//存放串值
int slen;//串长
public:
HString();
~HString();
HString(const HString &s1);//复制构造函数
HString(const char *str);
int Length() const {return slen;}
void operator=(const HString&s1);//赋值操作重载
const char *get_strval() const;//取串值
HString &Concat(const HString&s1,const HString &s2);
int Index(const HString &p);//求串p在当前串中第一次出现位置
int Compare(const HString &s1,const HString &s2);
friend bool operator==(const HString &s1,const HString &s2);//判断是否s1==s2;
friend bool operator<(const HString &s1,const HString &s2);
friend bool operator>(const HString &s1,const HString &s2);
friend bool operator<=(const HString &s1,const HString &s2);
friend bool operator>=(const HString &s1,const HString &s2);
friend bool operator!=(const HString &s1,const HString &s2);
char &operator[](int i)
{
if(i<0||i>=slen)exit(1);
return strval[i];
}
};
HString::HString()
{
slen=0;
strval=NULL;
}
HString::~HString()
{
delete []strval;
slen=0;
}
HString::HString(const char *str)
{
slen=strlen(str);
strval=new char[slen+1];
strcpy(strval,str);
}
HString::HString(const HString &s1)
{
slen=s1.Length();
strval=new char[slen+1];
strcpy( strval,s1.get_strval() );
}
void HString::operator =(const HString &s1)
{
delete[]strval;
slen=s1.Length();
strval=new char[slen+1];
strcpy(strval,s1.strval);
}
const char* HString::get_strval() const
{
return (const char * )strval;
}
HString & HString::Concat(const HString &s1, const HString &s2)
{
const char *cstr1=s1.get_strval(),*cstr2=s2.get_strval();
delete[]strval;
if (cstr1==NULL||cstr2==NULL)
{
exit(1);
}
else
{
strval=new char[s1.Length()+s2.Length()+1];
strcpy(strval,cstr1);
strcat(strval,cstr2);
slen=s1.Length()+s2.Length();
return *this;
}
}
int HString::Index(const HString &p)
{
const char *pval=p.get_strval();
char *ptr=strstr(strval,pval);
if(ptr==NULL)
return -1;
else
return (ptr-strval);
}
int HString::Compare(const HString &s1, const HString &s2)
{
return strcmp( s1.get_strval() , s2.get_strval() );
}
bool operator ==(const HString &s1, const HString &s2)
{
return strcmp( s1.get_strval() , s2.get_strval() )==0;
}
bool operator <(const HString &s1, const HString &s2)
{
return strcmp( s1.get_strval() , s2.get_strval() )<0;
}
bool operator >(const HString &s1, const HString &s2)
{
return strcmp( s1.get_strval() , s2.get_strval() )>0;
}
bool operator <=(const HString &s1, const HString &s2)
{
return strcmp( s1.get_strval() , s2.get_strval() )<=0;
}
bool operator >=(const HString &s1, const HString &s2)
{
return strcmp( s1.get_strval() , s2.get_strval() )>=0;
}
bool operator !=(const HString &s1, const HString &s2)
{
return strcmp( s1.get_strval() , s2.get_strval() )!=0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询