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 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184
| namespace my { class string { public: using value_type = char; using size_type = std::size_t; using difference_type = std::ptrdiff_t; using reference = value_type&; using const_reference = const value_type&; using pointer = value_type*; using const_pointer = const value_type*; using iterator = pointer; using const_iterator = const_pointer;
static constexpr size_type npos = static_cast<size_type>(-1);
string() noexcept ;
string(const std::string &s) ;
string(const value_type * s) ;
string(const char* s, size_type count) ;
string(const string& other) ;
string(string&& other) noexcept ;j
string& operator=(const string& other) ;
string& operator=(string&& other) noexcept ;
string& operator=(const char* s) ;
reference operator[](size_type pos) noexcept ;
const_reference operator[](size_type pos) const noexcept ;
reference at(size_type pos) ;
const_reference at(size_type pos) const ;
reference front() noexcept ;
const_reference front() const noexcept ;
reference back() noexcept ;
const_reference back() const noexcept ;
const_pointer c_str() const noexcept ;
const_pointer data() const noexcept ;
iterator begin() noexcept ;
const_iterator begin() const noexcept ;
const_iterator cbegin() const noexcept ;
iterator end() noexcept ;
const_iterator end() const noexcept ;
const_iterator cend() const noexcept ;
size_type size() const noexcept ;
size_type length() const noexcept ;
size_type capacity() const noexcept ;
bool empty() const noexcept ;
void reserve(size_type new_cap) ;
void shrink_to_fit() ;
void clear() noexcept ;
void push_back(char ch) ;
void pop_back() ;
string& append(const string& str) ;
string& append(const char* s, size_type count) ;
string& operator+=(const string& str) ;
string& operator+=(char ch) ;
string& erase(size_type pos = 0, size_type count = npos) ; string &insert(size_type pos, const string &str) ;
string &insert(size_type pos, const char *s) ;
string &insert(size_type pos, const char *s, size_type count) ; iterator insert(const_iterator p, value_type ch) ;
iterator insert(const_iterator p, size_type count, value_type ch) ;
void swap(string& other) noexcept ;
size_type find(const string& str, size_type pos = 0) const noexcept ;
size_type find_kmp(const string& str, size_type pos = 0) const ;
size_type find_kmp(const_pointer s, size_type pos, size_type count) const ;
size_type find(const char* s, size_type pos, size_type count) const noexcept ;
int compare(const string& other) const noexcept ;
string substr(size_type pos = 0, size_type count = npos) const ; std::vector<string> split(char delimiter, bool skip_empty = true) ;
std::vector<string> split(const string &delimiter, bool skip_empty = true);
};
inline bool operator==(const string& lhs, const string& rhs) noexcept ;
inline bool operator!=(const string& lhs, const string& rhs) noexcept ;
inline bool operator<(const string& lhs, const string& rhs) noexcept ;
inline bool operator<=(const string& lhs, const string& rhs) noexcept ;
inline bool operator>(const string& lhs, const string& rhs) noexcept ;
inline bool operator>=(const string& lhs, const string& rhs) noexcept ;
inline bool operator==(const string& lhs, const char* rhs) ; inline bool operator==(const char* lhs, const string& rhs) ;
inline string operator+(const string& lhs, const string& rhs) ; inline string operator+(const string& lhs, const char* rhs) ; inline string operator+(const char* lhs, const string& rhs) ; inline string operator+(const string& lhs, char rhs) ; inline string operator+(char lhs, const string& rhs) ;
inline std::ostream& operator<<(std::ostream& os, const string& str) ; }
using hstring = my::string;
|