String 的实现

#include<iostream>
#include<stdio.h>
#include<assert.h>
using namespace std;
class String
{
public :
     String(char* str="")
    {
          _size=strlen(str);
		  _capacity=_size+1;
		  _str=(char*)malloc(sizeof(char)*_capacity);
		  strcpy(_str,str);    
    }
	 String(const String& s)
		 :_str(NULL)
	 {
	    String tmp(s._str );
		swap(_str,tmp._str );
	 }
	 String( String& s)
		 :_str(NULL)
		
	 {
	    String tmp(s._str );
		swap(_str,tmp._str);
	 }
     String& operator =(const String& s )
    {
 
        return *this;
    }
    ~ String()
    {        
       if(_str)
	   {
	      free(_str);
	   }
    }
public:
	void _CheckCapacity(size_t capacity)
	{
	    if(capacity>_capacity)
		{
			_capacity=capacity+3;
		    _str=(char*)realloc(_str,capacity);
			assert(capacity);
		}
	}
	void PushBack(char ch)
	{
	    _CheckCapacity(_size+2);
		_str[_size++]=ch;
		_str[_size]='\0';
	}
	void Insert(size_t pos,char ch)
	{
	   _CheckCapacity(_size+2);
	   for(int begin=_size;begin>=pos;--begin)
	   {
	       _str[begin+1]=_str[begin];
	   }
	   _str[pos]=ch;
	   ++_size;
	}
	void Insert(size_t pos,const char* str)
	{
		int strSize=strlen(str);
	     int newCapacity=_size+strSize+1;
		 _CheckCapacity(newCapacity);
		 int end=strSize+_size;
		 for(int begin=_size;begin>=pos;--begin)
		 {
		   _str[end]=_str[begin];
		   --end;
		 }
		 strncpy(_str+pos,str,strSize);
		 _size+=strSize;
	}
	char* GetStr()
	{
	   return _str;
	}
	bool operator<(const String& s)
	{
	    char* begin1=_str;
		const char* begin2=s._str;
		while(*begin1 && *begin2)
		{
		    if(*begin1 >*begin2)
			{
			   return false;
			}
			else if(*begin1<*begin2)
			{
			    return true;
			}
			else
			{
			  ++begin1;
			  ++begin2;
			}
		}
		return *begin1<*begin2;
	}
	bool operator==(const String& s)
	{
	   if(_size!=s._size)
	   {
	      return false;
	   }
	   char* begin1=_str;
		const char* begin2=s._str;
		while(*begin1 && *begin2)
		{
		    if(*begin1 !=*begin2)
			{
			   return false;
			}
			else
			{
			  ++begin1;
			  ++begin2;
			}
		}
		return true;
	}
private :
     char* _str ;
	 int _size;
	 int _capacity;
};
void test()
{
    String s1("hell");
	cout<<s1.GetStr ()<<endl;
	s1.PushBack ('o');
	s1.PushBack ('d');
	cout<<s1.GetStr ()<<endl;
	s1.Insert (5,"worl");
	
	cout<<s1.GetStr ()<<endl;
}
void TestOperator()
{
     String s1("ab");
	 String s2("abc");
	 cout<<"s1<s2: "<<(s1<s2)<<endl;
	 String s3("ab");
	 String s4("abc");
	 cout<<"s3==s4: "<<(s3==s4)<<endl;
}
int main()
{
	//test();
	TestOperator();
	system("pause");
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值