C++比较经典的题,自定义string的实现
直接上代码
myString.h
#include <cstring>
using namespace std;
class myString
{
private:
char *str;
public:
myString(); //构造函数 mystring s
myString(const char *other); // mystring s("da")
myString(const myString &s1); // mystring s(s1);
myString &operator=(const char *str); // mystring s="sa"
myString &operator=(const myString &s1); // mystring s=s1;
myString &operator+(const myString &s); // mystring s=s1+s2
int mylen(); //字符串长度
friend ostream &operator<<( ostream &output, const myString &s); //输出重载 cout<<s
char &operator[](int a); // char c=str[2];
~myString(); // 析构函数
};
myString.cpp
#include <iostream>
#include "myString.h"
myString::myString()
{
int lengh=0;
str=new char[lengh+1];
strcpy(str,"");
}
myString::myString(const char *other)
{
if(other!=NULL)
{
int len=strlen(other);
str=new char[len+1];
strcpy(str,other);
}
else
{
int lengh=0;
str=new char[lengh+1];
strcpy(str,"");
}
}
myString::myString(const myString &s1)
{
if(this->str!=NULL)
{
delete [] this->str;
this->str=NULL;
}
int len=strlen(s1.str);
this->str=new char[len+1];
strcpy(this->str,s1.str);
}
myString &myString::operator=(const char *s)
{
if(this->str!=NULL)
{
delete [] this->str;
this->str=NULL;
}
int len=strlen(s);
this->str=new char[len+1];
strcpy(this->str,s);
return *this;
}
int myString::mylen()
{
return strlen(this->str);
}
myString &myString::operator=(const myString &s)
{
if(this->str!=NULL)
{
delete [] this->str;
this->str=NULL;
}
int len=strlen(s.str);
this->str=new char[len+1];
strcpy(this->str,s.str);
return *this;
}
ostream &operator<<( ostream &out, const myString &s)
{
out<<"字符:"<<s.str<<endl;
return out;
}
myString &myString::operator+(const myString &s)
{
myString *s3=new myString;
s3->str=new char[strlen(this->str)+strlen(s.str)+1];
strcpy(s3->str,this->str);
strcat(s3->str,s.str);
return *s3;
}
char &myString::operator[](int a)
{
return this->str[a];
}
myString::~myString()
{
if(str!=NULL)
{
delete [] str;
}
str=NULL;
}
int main()
{
myString s1;
cout<<"s1"<<s1;
myString s2("hello");
cout<<"s2"<<s2;
cout<<"s2.len:"<<s2.mylen()<<endl;
myString s3(s2);
cout<<"s3"<<s3;
myString s4="world";
cout<<"s4"<<s4;
s3="world";
cout<<"s3"<<s3;
myString s5=s2;
cout<<"s5"<<s5;
cout<<"char:"<<s5[2]<<endl;
myString s6;
s6=s2+s4;
cout<<"s6:"<<s6;
system("pause");
return 0;
}
运行结果
暂时想到这些功能,有什么漏掉的功能评论更新。