请用c++ 实现stl中的string类,实现构造,拷贝构造,析构,赋值,比较,字符串相加,获取长度及子串等功能。

来源:互联网 发布:linux shell 当前目录 编辑:程序博客网 时间:2024/06/05 03:49

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

#include <utility>

#include <string.h>

classString

{

public:

    String():data_(newchar[1])

    {

        *data_ = '\0';

    }

    String(const char * str):data_(newchar[strlen(str) + 1])

    {

        strcpy(data_, str);

    }

    String(const String & rhs)

        : data_(newchar[rhs.size() + 1])

    {

        strcpy(data_, rhs.c_str());

    }

    /* Delegate constructor in C++11

    String(const String& rhs):String(rhs.data_)

    {

    }

    */

    ~String()

    {

        delete[] data_;

    }

    /* Traditional:

    String& operator=(const String& rhs)

    {

        String tmp(rhs);

        swap(tmp);

        return *this;

    }

    */

    String &operator=(String rhs)// yes, pass-by-value

    {

        swap(rhs);

        return*this;

    }

    // C++ 11

    String(String &&rhs): data_(rhs.data_)

    {

        rhs.data_ = nullptr;

    }

    String &operator=(String && rhs)

    {

        swap(rhs);

        return*this;

    }

    // Accessors

    size_t size() const

    {

        return strlen(data_);

    }

    const char * c_str() const

    {

        return data_;

    }

    void swap(String & rhs)

    {

        std::swap(data_, rhs.data_);

    }

private:

    char *data_;

};

 

0 0
原创粉丝点击