////大部分的代码来自于零起点学通C++
#include <iostream> #include <cstring> using namespace std; class String { public: String(); ~String(); String(const char *const ch); String(const String &t); char &operator[](unsigned short int length); char operator[](unsigned short int length)const; String operator+(const String &a); String &operator=(const String &a); void operator+=(const String &a); friend ostream &operator<<(ostream &os,const String &t) { os<<t.str<<endl; return os; } friend istream &operator>>(istream &in,String &t) { in>>t.str; return in; } friend bool operator<(const String &a,const String &b) { if (strcmp(a.str,b.str)<0) return 1; else return 0; } friend bool operator>(const String &a,const String &b) { if (strcmp(a.str,b.str)>0) return 1; else return 0; } friend bool operator==(const String &a,const String &b) { if (strcmp(a.str,b.str)==0) return 1; else return 0; } unsigned short int getlength()const{return length;} const char *getstr()const{return str;} private: int length; char *str; String(unsigned short int); }; String::String(unsigned short int len) { str = new char[len+1]; for (int i=0;i<=len;i++) { str[i] = '\0'; } length = len; } String String::operator+(const String&t) { int length_total = length + t.getlength(); String temp(length_total); int i,j;//////////////// for (i=0;i<length;i++) { temp[i] = str[i]; } for(j=0;j<t.getlength();j++,i++) temp[i] = t[j]; temp[length_total] = '\0'; return temp; } ////////////// char &String::operator[](unsigned short int len) { if (len>length) return str[length-1]; else return str[len]; } char String::operator[](unsigned short int len)const { if(len>length) return str[length-1]; else return str[len]; } String::~String() { delete []str; length = 0; } /////////////// String::String() { length = 0; str = new char[1]; str[0] = '\0'; } ///////////////////// String::String(const char *const ch) { length = strlen(ch);//将得到的字符数组长度给length str = new char[length+1];// for (int i=0;i<length;i++) str[i] = ch[i]; str[length] = '\0';//这一步非常重要,表示复制的字符串结束了 } String::String(const String &t) { length = t.getlength(); str = new char[length+1]; for(int i=0;i<length;i++) str[i] = t[i]; str[length]='\0'; } String &String::operator=(const String & s) { if (this == &s) { return *this; } delete []str; length = s.getlength(); str = new char[length +1]; for(int i=0;i<length;i++) { str[i] = s[i]; } str[length] = '\0'; return *this; } ///////////////// void String::operator+=(const String &t) { int length_total = length+t.getlength(); String temp(length_total); int i,j; for (i=0;i<length;i++) { temp[i] = str[i]; } for(j=0;j<t.getlength();j++,i++) temp[i] = t[j]; temp[length_total] = '\0'; *this = temp; } void main() { String str; cout<<"str:"<<str.getstr()<<"共"<<str.getlength()<<"个字符"<<endl; String str1("china"); cout<<"str1:"<<str1.getstr()<<"共"<<str1.getlength()<<"个字符"<<endl; char *temp = "English"; String str2(temp);//构造函数 cout<<"str2:"<<str2.getstr()<<"共"<<str2.getlength()<<"个字符"<<endl; cout<<"please input a character:\n"; int number; cout<<"输入你想输入的下标"; cin>>number; cout<<"输入一个字符"; cin>>str[number]; if (number>=str2.getlength()) cout<<"the length of the string is "<<str2.getlength() <<"the number you input is overflow"<<endl; cout<<str2[number]<<endl; String str3 = "mother"; String str4("father"); cout<<"str3:"<<str3<<endl; cout<<"str4:"<<str4<<endl; String str5 = str3+str4; cout<<"str5:"<<str5<<endl; system("pause"); }