码迷,mamicode.com
首页 > 其他好文 > 详细

String 的实现

时间:2016-03-21 02:02:32      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:c++、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;
}


String 的实现

标签:c++、string

原文地址:http://760470897.blog.51cto.com/10696844/1753218

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!