实现自己的字符串类String

原因

因为string预分配与SDS上比较有些不足,所以重新封装了自己的字符串类String。

类的名称(编号)

FDB_String.h
FDB_String.h

类的声明与作用

FDB中的字符串类。

类开发的必要性,唯一性

以有文档,见compare_string_SDS.md

类中各函数的复杂度,可能瓶颈

new的使用仍有瓶颈。
且存在new的遗留问题。

类的声明与定义

class String
{
    //重载部分运算符
    //重载 '>','<','==','!='关系运算符
    friend bool operator<(const String &lhs, const String &rhs);
    friend bool operator>(const String &lhs, const String &rhs);
    friend bool operator==(const String &lhs, const String &rhs);
    friend bool operator!=(const String &lhs, const String &rhs);
    //重载输入输出运算符
    friend std::ostream& operator<<(std::ostream &os, const String &rhs);
    friend std::istream& operator>>(std::istream &is, String &rhs);
    //重载相加运算符
    friend String operator+(const String &lhs, const String &rhs);
    friend String operator+(const String &lhs, const char *rhs);

private:
    int size;       //字符串已用长度
    int free;       //字符串已经使用长度
    char *str;      //空闲长度
public:
    String();                     //无参构造
    String(char *rhs);            //行参为char* 构造函数
    String(const String &rhs);    //复制构造函数
    ~String();                   //析构函数

    //重载运算符
    String & operator=(const String &rhs);  //赋值运算符
    String & operator=(const char *rhs);    //行参为char* 的赋值运算符
    char& operator[](int i);                //下标运算符
    String& operator+=(const String &rhs);  //复合赋值运算符
    String& operator+=(const char *rhs);    //行参为char *的复合赋值运算符

    //接口函数
    int getsize() const;                //获取当前字符串已用空间
    int getfree() const;                //获取字符串空闲空间
    void Print();                   //打印字符串
    String &StringAdd(const String &str2);      //向字符串添加String类型内容
    String &StringAdd(const char *s);           //向字符串添加char *类型的内容
    String &StringClear();              //清除字符串内容
    String &StringSizeClear(size_t pos, size_t len);    //以pos开始清除之后len长度的内容
    String &StringChange(const char *s);        //修改字符串为s
    String &StringChange(const String &str2);       //修改字符串为str2
};

类成员函数接口说明

友元函数:
1.friend bool operator<(const String &lhs, const String &rhs);
    以lhs对象和rhs对象中的str成员比较大小。若lhs大于rhs则返回ture,否则返回false。
2.friend bool operator>(const String &lhs, const String &rhs);
    以lhs对象和rhs对象中的str成员比较大小。若lhs小于rhs则返回ture,否则返回false。
3.friend bool operator==(const String &lhs, const String &rhs);
    判断lhs对象和rhs对象中的str成员相等。若相等返回ture,否则返回false。
4.friend bool operator!=(const String &lhs, const String &rhs);
    判断lhs对象和rhs对象中的str成员相等。若不相等返回ture,否则返回false。
5.friend std::ostream& operator<<(std::ostream &os, const String &rhs);
    将rhs对象中str对象打印出来。
6.friend std::istream& operator>>(std::istream &is, String &rhs);
    将is流内的数据写入rhs对象内。
7.friend String operator+(const String &lhs, const String &rhs);
    将lhs对象和rhs对象向加,返回向加后的结果。
8.friend String operator+(const String &lhs, const char *rhs);
    将lhs对象和rhs数组向加,返回向加后的结果。
成员函数:
1.int getsize() const;      
    获取当前字符串已用空间,无参
2.int getfree() const;  
    获取字符串空闲空间,无参
3.void Print(); 
    打印字符串,无参
4.String &StringAdd(const String &str2); 
    向字符串添加String类型内容。参数str2为需要添加的String类字符串。返回添加后的字符串。
5.String &StringAdd(const char *s); 
    向字符串添加char *类型的内容.参数s为需要添加的char *类型字符串。返回添加后的字符串。
6.String &StringClear();                
    清除字符串内容,无参,返回清除后的字符串。
7.String &StringSizeClear(size_t pos, size_t len);
    以pos开始清除之后len长度的内容,参数以说明,返回清除后的字符串。
8.String &StringChange(const char *s); 
    修改字符串为s。参数s为代替原字符串的char*类型字符串。返回改变后的字符串。
9.String &StringChange(const String &str2); 
    修改字符串为str2。参数str为代替原字符串的String类类型字符串。返回改变后的字符串。
10.String & operator=(const String &rhs);   
    赋值运算符。将rhs对象赋值给this对象。返回this对象。
11.String & operator=(const char *rhs);     
    行参为char* 的赋值运算符。将rhs数组赋值给this对象。返回this对象
12.char& operator[](int i);             
    下标运算符。获取this对象中str成员下标为i的引用。
13.String& operator+=(const String &rhs);
    复合赋值运算符。将rhs对象与this对象相加并赋值给this对象。
14.String& operator+=(const char *rhs);     
    行参为char *的复合赋值运算符。将rhs数组与this对象相加并赋值给this对象。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
自己实现字符串 class CMStringImp; class CMstring { public: explicit CMstring(void); ~CMstring(void); CMstring(LPCTSTR lpszstr); CMstring(const CMstring& lpszstr); CMstring& operator = (const CMstring& lpszstr); operator LPCTSTR() const; bool operator == (const CMstring&) const; bool operator != (const CMstring&) const; bool operator < (const CMstring&) const; TCHAR operator[] (int nIndex) const; TCHAR& operator[] (int nIndex); CMstring& operator += (LPCTSTR pStr); CMstring& operator += (TCHAR ch); friend CMstring operator+(const CMstring& str1, const CMstring& str2); friend CMstring operator+(const CMstring& str1, LPCTSTR lpszstr); friend CMstring operator+(const CMstring& str1, TCHAR ch); friend CMstring operator+(TCHAR ch, const CMstring& str1); friend CMstring operator+(LPCTSTR lpszstr, const CMstring& str1); // friend wostream operator <<(wostream &is;,const CMstring &str;); public: LPCTSTR GetData() const; bool IsEmpty() const; TCHAR GetAt(int) const; TCHAR& GetAt(int); int GetLength() const; int Compare(const CMstring&) const; int CompareNoCase(const CMstring&) const; int Find(TCHAR ch, int nStart = 0) const; int Find(LPCTSTR pStr, int nStart = 0) const; int ReverseFind(TCHAR ch) const; int ReverseFind(LPCTSTR pStr) const; CMstring Right(int nCount) const; CMstring Left(int nCount ) const; public: CMstring& MakeLower(); CMstring& MakeUpper(); CMstring& MakeReverse(); int Replace(TCHAR chOld, TCHAR chNew); int Replace(LPCTSTR pszOld, LPCTSTR pszNew); int Insert(int iIndex, TCHAR ch); void Format(LPCTSTR lpszFormat, ...); private: CMStringImp* m_pImp; };
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值