#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 的实现
最新推荐文章于 2022-08-21 10:35:40 发布