注意:有指针成员情况下,写构造函数时一定要先分配空间
同时,要写析构函数,手动释放堆空间
#include<iostream>
#include<string.h>
using namespace std;
class stringC
{
public:
//构造 析构
stringC();
stringC(int,char);//重复输出某个字符
stringC(const char*);//输出一串字符
stringC(const char*,int);//拷贝任意长度字符到新字符串
~stringC();
stringC(stringC&);
//比较
int compare(stringC&);
int compare(const char*);
int compare(int,int,stringC&);
//长度
int length();
void Cout();
//替换
stringC* replace(int,int,stringC&);
stringC* replace(int,int,stringC&,int);
private:
char* s;
};
/**************构造 析构 *************/
stringC::stringC()
{
this->s=NULL;
}
stringC::stringC(int num,char c)
{
this->s=new char[num+1];
int i;
for(i=0;i<num;i++)
s[i]=c;
s[i]='\0';
}
stringC::stringC(const char*s)
{
this->s=new char[strlen(s)+1];
strcpy(this->s,s);
}
stringC::stringC(stringC& p)
{
this->s=new char[strlen(p.s)+1];
strcpy(this->s,p.s);
}
stringC::~stringC()
{
while(this->s!=NULL)
{
delete [] this->s;
this->s=NULL;//注意野指针问题
}
}
stringC::stringC(const char* p,int num)
{
this->s=new char[num+1];
int i;
strncpy(this->s,p,num);
}
/***************比较******************/
int stringC::compare(int index,int length,stringC& str)
{
char *p=new char[length+1];
int i;
for(i=index;i<index+length;i++)
p[i-index]=this->s[i];
p[i-index]='\0';
return strcmp(p,str.s);
}
int stringC::compare(const char* p)
{
return strcmp(this->s,p);
}
int stringC::compare(stringC& p)
{
return strcmp(this->s,p.s);
}
/***************长度**************/
int stringC::length()
{
return strlen(this->s);
}
void stringC::Cout()
{
cout<<s<<endl;
}
stringC* stringC::replace(int index,int num,stringC& str)
{//用str内的num个字符,替换自身从index开始的num个字符
int i;
for(i=index;i<index+num;i++)
{
this->s[i]=str.s[i-index];
}
return this;
}
int main()
{
/* stringC a(5,'c');
a.Cout();
stringC b("hello cmz");
b.Cout();
stringC c(b);
c.Cout();
stringC d("hello",2);
d.Cout();
stringC a1("hello");
stringC a2("hello");
cout<<a1.compare(a2)<<endl;
cout<<a1.compare("hello")<<endl;
stringC a3("world hello");
cout<<a3.compare(6,5,a1)<<endl;
cout<<a1.length()<<endl;
stringC a4("hhhhh");
a1.replace(0,5,a4);
a1.Cout();
*/
}