-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstring.hpp
More file actions
175 lines (142 loc) · 6.74 KB
/
string.hpp
File metadata and controls
175 lines (142 loc) · 6.74 KB
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
// Copyright 2018 Your Name <your_email>
#ifndef INCLUDE_STRING_HPP_
#define INCLUDE_STRING_HPP_
#include <cstddef>
#include <iostream>
#include <utility>
class String {
public:
/// Деструктор
~String();
/// Конструктор по умолчанию
String();
/// Конструктор копирования
/// <param name="rhs">Объект, который копируем </param>
String(const String &rhs);
/// Пользовательский конструктор
/// <param name="data">Данные, которые требуется поместить в создаваемый
/// объект </param>
explicit String(const char *data);
/// Оператор присваивания
/// <param name="data">Объект, который копируем </param>
/// <returns>Возвращаем ссылку на себя</returns>
String &operator=(const String &rhs);
/// Оператор +=
/// <param name="rhs">Объект, который стоит после знака '+=' </param>
/// <returns>Возвращаем ссылку на себя</returns>
String &operator+=(const String &rhs);
/// Оператор +=
/// Чтоб Тревис не ныл
/// <param name="rhs">Объект, который стоит после знака '+=' </param>
/// <returns>Возвращаем ссылку на себя</returns>
String &operator+=(const char *rhs);
/// Оператор *=
/// <returns>Возвращаем ссылку на себя</returns>
String &operator*=(unsigned int m);
/// Оператор ==
/// <param name="rhs">Объект, который стоит после знака '==' </param>
/// <returns>Возвращаем значения равенства двух строк</returns>
bool operator==(const String &rhs) const;
/// Оператор <
/// <param name="rhs">Объект, который стоит после знака "<" </param>
/// <returns>Возвращаем значения сравнения двух строк</returns>
bool operator<(const String &rhs) const;
/// Функция поиска подстроки
/// <param name="substr">Подстрока, которую необходимо найти </param>
/// <returns>Возвращаем позицию substr. Если подстрока не найдена, то
/// возвратить -1</returns>
size_t Find(const String &substr) const;
/// Функция поиска подстроки
/// Только в этот раз для char*, привет тревис...
/// <param name="substr">Подстрока, которую необходимо найти </param>
/// <returns>Возвращаем позицию substr. Если подстрока не найдена, то
/// возвратить -1</returns>
size_t Find(const char *str) const;
/// Функция замены символов, заменяет все символы oldSymbol на newSymbol.
/// <param name="oldSymbol">Символ, который требуется заменить </param>
/// <param name="newSymbol">Символ, на который требуется заменить </param>
void Replace(char oldSymbol, char newSymbol);
/// Функция возвращает длину строки
/// <returns>Возвращаем длину строки</returns>
size_t Size() const;
/// Функция для определения пуста ли строка
bool Empty() const;
/// Оператор []
/// <example>
/// <code>
/// String str = "some string";
/// char symbol = str[2]; // symbol == 'm'
/// </code>
/// </example>
/// <param name="index"> Индекс символа </param>
/// <returns> Значение символа в строке с индексом index</returns>
char operator[](size_t index) const;
/// Оператор []
/// <example>
/// <code>
/// String str = "some string";
/// str[0] = 'S'; // теперь переменная str равна "Some string"
/// </code>
/// </example>
/// <param name="index"> Индекс символа </param>
/// <returns> Ссылка на символ в строке с индексом index</returns>
char &operator[](size_t index);
/// Смотри пример
/// <example>
/// <code>
/// String str = "___some string___";
/// str.RTrim('_'); // теперь переменная str равна "___some string"
/// </code>
/// </example>
/// <param name="symbol"> Значение символов, которе отрезаем </param>
void RTrim(char symbol);
/// Смотри пример
/// <example>
/// <code>
/// String str = "___some string___";
/// str.LTrim('_'); // теперь переменная str равна "some string___"
/// </code>
/// </example>
/// <param name="symbol"> Значение символов, которе отрезаем </param>
void LTrim(char symbol);
void swap(String &oth);
/// Уменьшает размер контейнера до длинны строки, освобождая память
/// (Раз уж решил выделять памяти с запасом, то надо за нее отвечать)
void shrink_to_fit();
friend std::ostream &operator<<(std::ostream &, const String &);
private:
char *Data;
size_t capasity = 0;
};
/// Оператор +
/// <example>
/// <code>
/// String a = "Hello";
/// String b = "World";
/// String c = a + b; // c равна "HelloWorld"
/// </code>
/// </example>
/// <returns>Возвращаем строку равную a + b</returns>
String operator+(const String &a, const String &b);
/// Оператор *
/// <example>
/// <code>
/// String a = "A";
/// String c = a * 5; // c равна "AAAAA"
/// </code>
/// </example>
String operator*(const String &a, unsigned int b);
/// Оператор !=
bool operator!=(const String &a, const String &b);
/// Оператор >
bool operator>(const String &a, const String &b);
/// Оператор вывода
/// <param name="out">Поток куда выводим строку </param>
/// <param name="str">Строка, которую выводим </param>
/// <returns>Возвращаем ссылку на поток</returns>
std::ostream &operator<<(std::ostream &out, const String &str);
/// Оператор ==
/// Сравнивает левый операнд const char* и правый const String&
/// Все ради тебя, тревис (;⌣̀_⌣́)
bool operator==(const char *ls, const String &rs);
#endif // INCLUDE_STRING_HPP_