#include <iostream>
#include <assert.h>
using namespace std;
class String
{
public:
String(char *str = "")
:_str(new char[strlen(str)+1])
{
cout<<"String()"<<endl;
strcpy(_str,str);
}
~String()
{
cout<<"~String()"<<endl;
if(_str != NULL)
{
delete[] _str;
}
}
String(const String& str)
:_str(NULL)//_str(new char[1])
{
cout<<"String(const String& str)"<<endl;
String tmp(str._str);
swap(_str,tmp._str);
}
String& operator=(const String& str)
{
cout<<"String& operator=(const String& str)"<<endl;
String tmp(str);
swap(_str,tmp._str);//交换地址
return *this;
}
int _Strcmp(const char* dest,const char *src)
{
assert(dest);
assert(src);
while(*dest == *src)
{
if(*dest == ‘\0‘)
return 0;
dest++;
src++;
}
return (*dest-*src);
}
bool operator==(String &str)
{
int ret = _Strcmp(_str,str._str);
if(ret == 0)
return true;
return false;
}
bool operator>(String &str)
{
int ret = _Strcmp(_str,str._str);
if(ret > 0)
return true;
return false;
}
bool operator!=(String &str)
{
return !(_str == str._str);
}
bool operator<(String &str)
{
return !((_str == str._str)&&(_str > str._str));
}
void insert(int pos,char ch)
{
int length = strlen(_str);
int i = 0;
for(i=0;i<length-pos+1;i++)
{
_str[length-i] = _str[length-1-i];
}
_str[pos-1] = ch;
_str[length+1] = ‘\0‘;
}
void _insert(int pos,char* str)
{
int i = 0;
int j = 0;
int l1 = strlen(_str);
int l2 = strlen(str);
int size = l1-pos+1;
for(i=0;i<size;i++)
{
_str[l1-i+1] = _str[l1-i-1];
}
for(j=0;j<l2;j++)
{
_str[pos-1+j] = str[j];
}
_str[l1+l2] = ‘\0‘;
}
void insert2(int pos,char* str)
{
_insert(pos,str);
}
void insert3(int pos,const String& str)
{
_insert(pos,str._str);
}
int size()
{
return strlen(_str);
}
void PushBack(int ch)
{
int len = 0;
char *s_str = _str;
while(*s_str)
{
len++;
s_str++;
}
_str[len] = ch;
_str[len+1] = ‘\0‘;
}
private:
char *_str;
};
int main()
{
String str = "bi";
///*String str2(str1);
//String str3;
//str3 = str1;*/
//String str2 = "bit";
////int ret = str2.operator ==(str1);
//int ret = str2 > str1;
//char *str = "xi";
String str1 = "zhang";
//str1.insert(2,‘w‘);
//str1.insert2(3,str);
str1.insert3(1,str);
//int ret = str1.size();
//str1.PushBack(‘t‘);
//str.operator ==(str1);
return 0;
}