Реализация строки String
Вариант
Односвязный список из многосимвольных блоков с переменной длиной.
Константы:
long long NOT_FOUND = -1
- значение, если не найдена подстрока в строке.
Поля класса
unsigned int size
- количество символов в блоке;unsigned int blocks
- количество многосимвольных блоков;unsigned int lastLength
- количество символов в последнем блоке;MulticharacterBlock* head
- ссылка на первый многосимвольный блок;MulticharacterBlock* tail
- ссылка на последний многосимвольный блок;unsigned int DEFAULT_SIZE = 16
- длина многосимвольного блока по умолчанию (константа).
Конструкторы, оператор копирования и деструктор
String(unsigned int = DEFAULT_SIZE)
- главный конструктор;String(const char*, unsigned int
= DEFAULT_SIZE) - конструктор из CString;String(const std::string&, unsigned int = DEFAULT_SIZE)
- конструктор из STDString;String(const String&)
- оператор копирования;~String()
- деструктор.
Cтандартные методы
unsigned int length() const
- получение длины строки (каждый символ считается единицей измерения длины);String copy(unsigned int n, unsigned int k)
- копированиеk
символов, начиная сn
символа включительно;- Методы поиска - поиск начала подстроки в строке (первое вхождение слева) если такое есть, иначе -
NOT_FOUND
:long long find(const String&) const
;long long find(const char*) const
;long long find(const std::string&) const
;
- Методы конкатенация - сцепление строк:
void concatenate(const String&)
;void concatenate(const char*)
;void concatenate(const std::string&)
.
Перегрузка стандартных операторов
friend std::ostream &operator<<(std::ostream&, const String&)
- вывод строки;- Оператор
+
:friend String operator+(const String&, const String&)
;friend String operator+(const String&, const char*)
;friend String operator+(const String&, const std::string&)
;friend String operator+(const char*, const String&)
;friend String operator+(const std::string&, const String&)
;
- Оператор
+=
:friend void operator+=(String&, const String&)
;friend void operator+=(String&, const char*)
;friend void operator+=(String&, const std::string&)
;
- Оператор присваивания:
String& operator=(const String&)
;String& operator=(const char*)
;String& operator=(const std::string&)
.
Бонусные методы
explicit operator bool() const
- возвращает истину, если строка не пуста, иначе - ложь.;char* toCString() const
- преобразование строки в массивchar
;String replace(const String &string, const String &toReplace, const String &withReplace)
- замена всех подстрокtoReplace
наwithReplace
в строкеstring
.