c++模拟实现string

#define  _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
 using namespace std;
 class String
 {
 public:
	 String(const char* str=" ")
	 {
        size_t len=strlen(str);
		_str=new char[len+1];
		strcpy(_str,str);
		_size=len;
		_capacity=len;
	 }
	 String(const String& s)
		 :_str(NULL)
	 {
		 String tmp(s._str);
		 tmp.Swap(*this);		 
	 }
	 String& operator=(String s)
	 {
         this->Swap(s);
		 return *this;
	 }
     ~String()
	 {
	     if (_str)
	     {
			 delete [] _str;
			 _str=NULL;
			 _size=_capacity=0;
	     }
	 }
	 char* Getstr()
	 {
	   return _str;
	 }
	 const char* Getstr() const
	 {
      return _str;	
	 }
	 size_t Size()
	 {
	      return  _size;
	 }
	 size_t Size() const
	 {
       return _size;
	 }
     size_t capacity()
	 {
	   return _capacity;
	 }

	 void Expand(size_t n)
	 {
	    assert(n>_capacity);
		_str=(char*)realloc(_str,n);
		_capacity=n;
	 }
	 void PushBack(char ch)
	 {
	    if (_size==_capacity)
	    {
			Expand(_size*2);
	    }
		_str[_size]=ch;
		_str[_size+1]='\0';
		++_size;
	 }
	 void Insert(size_t pos,const char* str)
	 {
	   assert(pos<=_size);
	   size_t len=strlen(str);
	   if (_size+len>_capacity)
	   {
		   Expand(_size+len+1);
	   }
	 
      size_t end=_size;
	  while (end>=pos)
	  {
		  _str[len+end]=_str[end];
          --end;
	  }
	  while (*str)
	  {
		  _str[pos]=*str;
		  ++pos;
		  ++str;
	  }
	 }
		 void Insert(size_t pos, char ch) 
	 {
		 assert(pos <= _size);
		 size_t end = _size;
		 while(end >= pos)
		 {
			 _str[end+1] = _str[end];
			 --end;
		 }
		 _str[pos] = ch;
		 ++_size;
	 }
	 void Insert(size_t pos,const String& s,size_t subPos, size_t subLen)
	 {
		 assert(subPos<s.Size());
		 const char* str=s.Getstr()+subPos;
		 while (subLen)
		 {
			 Insert(pos,*str);
			 ++str;
			 ++subPos;
			 --subLen;
			 ++pos;
		 }
	 }
	 void Erase(size_t pos,size_t len)
	 {
	    assert(pos<_size);
		if (pos+len>=_size-1)
		{
			_size=pos;
			_str[_size]='\0';
		}
		else
		{
			char* dst=_str+pos+len;
			char* src=_str+pos;
            strcpy(src,dst);
			_size-=len;
		}
	 }
	 int Find(char ch)
	 {
		 size_t i=0;
		 for (i=0;i<_size;i++)
		 {
			 if (ch=_str[i])
			 {
				 return 1;
			 }
			 else
				 return 0;	
		 }
	     
	 }
	 int Find(const char* sub)
	 {
		 size_t len=strlen(sub);
		 size_t i=0;
		 char* str1=_str;
		  if (* str1++=*sub++)
		  {
             return 1;
		  }
		  else 
			  return 0;    
	 }
	 bool operator<(const String& s)
	 {
		 assert(s._str);

	 }
	 bool operator>(const String& s)
	 {
		 int i = 0;
		 while(_str[i] == s._str[i])
		 {
			 ++i;
		 }
		 if(_str[i] > s._str[i])
		 {
			 return true;
		 }
		 return false;
	 }
	   bool operator>=(const String& s)
	   {
           return   *this==s||*this>s;
	   }
	      bool operator<=(const String& s)
		  {
		      return !(*this>s);
		  }
		 bool operator==(const String& s)
		 {
			 int i=0;
			 while(_str[i]==s._str[i])
			 {
				 ++i;
			 }
			 if (i==_size)
			 {
				 return true;
			 }			 
				 return false;			 
		 }
		  bool operator!=(const String& s)
		  {
              return !(*this==s);
		  }
		  String SubStr(size_t pos,size_t len)
		  {
			  assert(pos<_size);
		  }
	 void Swap(String& s)
	 {
		 swap(_str, s._str);
		 swap(_size, s._size);
		 swap(_capacity, s._capacity);
	 }
 private:
	 char* _str;
	 size_t _size;
	 size_t _capacity;

 } ;

#include <iostream>
using namespace std;
#include <assert.h>
#include <string.h>
#include "String.h"

void TestString()
{
     String s1("hello");
   cout<<s1.Getstr()<<endl;
  String s2(s1);
   s2.Erase(2,2);
  cout<<s2.Getstr()<<endl;
 
  s1.Insert(5," world");
     cout<<s1.Getstr()<<endl;
}
int main()
{
 TestString();
 return 0;
}
 


  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值