String 的实现

来源:互联网 发布:淘宝等级怎么提升 编辑:程序博客网 时间:2024/06/06 01:08
#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;}
原创粉丝点击