C++初阶:string类模拟实现

        本节内容主要针对的是在STL之前的string类的实现,通过模拟实现string类的一些功能来更好地使用string。本篇主要针对的是非const对象,如果要实现const的对象的话,只需要在对应的部分增添上const就行了。编者水平有限,如有错误欢迎指正。

目录

1.String.h

2.Test.cpp


1.String.h

#include 
#include 
#include 
using namespace std;
class String
{
    
    friend istream& getline(istream &in, String &s);
    friend ostream& operator<<(ostream&out,String&s);
    friend istream& operator>>(istream &in, String &s);
public: 
    static const size_t npos = -1;
    // 实现迭代器
    typedef char *iterator;
    typedef const char *const_iterator;
    iterator begin()
    {
        return _str;
    }
    iterator end()
    {
        return _str + _size;
    }
    const_iterator begin() const
    {
        return _str;
    }
    const_iterator end() const
    {
        return _str + _size;
    }
    // 构造
    String(const char *str = "");
    // 析构
    ~String();
    //拷贝构造
    String(const String& s);
    // 获取长度
    size_t size() const;
    // 获取容器容量
    size_t capacity() const;
    // 访问元素
    char &operator[](size_t pos);
    // 获取字符数组
    const char *c_str() const;
    // 容量预设
    void reserve(size_t n);
    // 调整大小
    void resize(size_t n, char c = '\0');
    // 尾插字符
    void push_back(char c);
    // 尾插字符串
    void append(const char *s);
    // 尾插数据
    String &operator+=(const char *s);
    String &operator+=(char c);
    // 清除数据
    String &erase(size_t pos = 0, size_t len = npos);
    // 查找字符或子串
    size_t find(char c, size_t pos = 0) const;
    size_t find(const char *s, size_t pos = 0) const;
    // 取子串
    String substr(size_t pos = 0, size_t len = npos) const;
    // 清除
    void clear();
    // 交换
    void swap(String &s);
    // 插入
    String &insert(size_t pos, char c);
    String &insert(size_t pos, const char *s);
    
    // 重载
    String operator+(const char* s);
    String &operator=(const String &s);
    bool operator>(const String& s);
    bool operator<(const String& s);
    bool operator==(const String& s);
    
private:
    // 长度
    int _size;
    // 容量
    int _capacity;
    // 内容
    char *_str;
};
istream& getline(istream &in, String &s)
{
    //先对原字符串进行清空
    s.clear();
    //然后获取字符,填充buff数组
    char ch;
    ch = in.g

你可能感兴趣的:(C/C++,c++,开发语言)