.head
1 #pragma once 2 #include<iostream> 3 #include<string> 4 #include<stdlib.h> 5 #include<ctype.h> 6 using namespace std; 7 8 class TString 9 { 10 public: 11 //输入/输出操作符 12 //构造函数,创建一个空字符对象 13 TString(); 14 //创建一个字符串对象,该对象包含指向字符的s指针 15 //s必须以NULL结尾,从s中复制字符 16 TString(const char* s); 17 //创建一个包含单个字符aChar的字符串 18 TString(char aChar); 19 TString(const TString& arg);//拷贝构造函数 20 ~TString();//析构函数 21 //赋值操作符 22 TString& operator=(const TString& arg); 23 TString& operator=(const char* s); 24 TString& operator=(char aChar); 25 //返回对象当前储存的字符个数 26 int Size() const; 27 //返回posn中len长度的子字符串 28 TString operator()(unsigned posn, unsigned len) const; 29 //返回下表为n的字符 30 char operator()(unsigned n) const; 31 //返回对下标为n的字符的引用 32 const char& operator[](unsigned n) const; 33 //返回指向内部数据的指针,当心 34 const char* c_str()const { return _str; }; 35 //以下方法将修改原始对象。 36 //把其他对象中的字符附加在*this后 37 TString& operator+=(const TString& other); 38 //在字符串中改动字符的情况 39 TString& ToLower();//将大写字符转换成小写 40 TString& ToUpper();//将小写字符转换成大写 41 private: 42 //length是存储在对象中的字符个数,但是str所指向的内存至少要length+1长度 43 unsigned _length; 44 char* _str;//指向字符的指针 45 46 }; 47 48 //支持TString类的非成员函数 49 //返回一个新TSring类的对象,该对象为one和two的级联 50 TString operator+(const TString& one, const TString& two); 51 //输入/输出操作符 52 ostream& operator<<(ostream& o, const TString& s); 53 istream& operator >> (istream& stream, TString& s); 54 //关系操作符,基于ASCII字符集比较。 55 //如果两字符串对象包含相同的字符,则两对象相等。 56 bool operator==(const TString& first, const TString& second); 57 bool operator!=(const TString& first, const TString& second); 58 bool operator<(const TString& first, const TString& second); 59 bool operator>(const TString& first, const TString& second); 60 bool operator>=(const TString& first, const TString& second); 61 bool operator<=(const TString& first, const TString& second);
.cpp
1 #include "TString.h" 2 3 4 5 TString::TString() 6 { 7 _str = 0; 8 _length = 0; 9 } 10 11 12 TString::TString(const char* s) 13 { 14 if (s&&*s) 15 { 16 //指针不为0且指向有效字符 17 _length = strlen(s); 18 _str = new char[_length + 1]; 19 strcpy(_str, s); 20 } 21 else 22 { 23 _str = 0; 24 _length = 0; 25 } 26 } 27 28 TString::TString(char achar) 29 { 30 if (achar) 31 { 32 _length = 1; 33 _str = new char[2]; 34 _str[0] = achar; 35 _str[1] = '