c++重写string类

这是第一次写的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 &copy(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一样的方式,还请大神指导。。。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值