这是第一次写的string类,可能会有些没有考虑到的问题,还请大神指导。。。。
//重写string类
#include <iostream>
#include <string>
using namespace std;
class my_string///*
{
public:
//三种构造函数
my_string(){};
my_string(int n,const char a)
{
len=n+1;
data=new char[n+1];
for (int i=0;i<n;i++)data[i]=a;
data[n]='\0';
};
my_string(const char in[])
{
int n=0;
while (in[n++]!='\0');
len=n-1;
data=new char[len+1];
for (int i=0;i<len+1;i++) data[i]=in[i];
}
//析构函数
~my_string()
{
if (len>0)
{
delete[]data;
data=NULL;
}
};
//拷贝构造函数
my_string (const my_string & s1)
{
this->data=new char[s1.len+1];
strcpy(data,s1.data);
this->len=s1.len;
}
//长度
int size(my_string s1)
{
return s1.len-1;
}
int length(my_string s1)
{
return s1.len-1;
}
//追加字符串
my_string &append(const char *a)
{
len=strlen(a)+this->len;
int beg=this->len;
for (int i=beg;i<=len;i++)
{
this->data[i]=a[i-beg];
}
return *this;
}
//赋值运算符
my_string &assign(const char* str)
{
}
//比较函数
int compare(const my_string & s1)
{
int len1=min(s1.len,this->len);
int i;
for (i=0;i<len1;i++)
{
if (s1.data[i]>this->data[i]) return 1;
if (s1.data[i]<this->data[i]) return -1;
}
if (len1<s1.len) return 1;
if (len<this->len) return -1;
return 0;
}
//拷贝函数
my_string ©(const my_string &s1, const int n)
{
if (n>s1.len)
{
return *this;//拷贝的字节数超过给定的字符串长度
}
this->len=n;
for (int i=0;i<n;i++)
{
this->data[i]=s1.data[i];
}
return *this;
}
//查找函数
int find(const char &a,const int &pos)
{
for (int i=pos;i<this->len;i++)
{
if(this->data[i]==a)
return i;
}
return -1;
}
//清除函数
void clear()
{
this->len=0;
delete[] this->data;
this->data=NULL;
}
//运算符重载
my_string &operator +(const char &a)
{
char *temp=new char[this->len+1];
for (int i=0;i<this->len;i++ )
{
temp[i]=this->data[i];
}
temp[len]=a;
delete []this->data;
this->data=NULL;
this->data=temp;
this->len++;
this->data[this->len]='\0';
return *this;
}
friend ostream &operator << (ostream& os,const my_string &s1 )
{
for (int i=0;i<s1.len;i++)
{
os<<s1.data[i];
}
return os;
}
friend istream &operator >> (istream& is,my_string &s1)
{
int k=1000,i=0;
s1.data=new char[k];
while (is.peek()!='\n')
{
//while(i<k-1)
is>>s1.data[i++];
}
s1.len=i;
s1.data[i]='\0';
return is;
}
char &operator [] (const int &i)
{
if (i<this->len) return this->data[i];
}
private:
char *data;//私有数据量只能通过类内函数去搞定
int len;
};//*/
int main()
{
my_string s1;
cin>>s1;
cout<<s1<<endl;
cout<<(s1+s1[1]);
my_string s2=s1;
cout<<s2;
return 0;
}
1.重载输入流的过程中怎么扩大输入的限制,是不是类似与vector一样的方式,还请大神指导。。。