标签: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; }
标签:c++、string
原文地址:http://760470897.blog.51cto.com/10696844/1753218