From b38346eebca9a007971af02fb3bb9472c5e16d0c Mon Sep 17 00:00:00 2001 From: Syndamia Date: Sun, 26 Apr 2026 21:43:31 +0300 Subject: feat(Week09): Add solutions --- Week09/Exercise03/String.h | 61 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 Week09/Exercise03/String.h (limited to 'Week09/Exercise03/String.h') diff --git a/Week09/Exercise03/String.h b/Week09/Exercise03/String.h new file mode 100644 index 0000000..674813c --- /dev/null +++ b/Week09/Exercise03/String.h @@ -0,0 +1,61 @@ +#ifndef _STRING +#define _STRING + +#include + +class String { + char* str; + unsigned length; + + void free(); + void copyFrom(const String& other); + +public: + String(); + ~String(); + String(const String& other); + String& operator=(const String& other); + + String(String&& other); + String& operator=(String&& other); + + // Помощни член-функции, за да тестваме String + String(const char* str); + friend std::ostream& operator<<(std::ostream& ostr, const String& string); + + // Каза ни са кои оператори трябва да бъдат имплементирани, + // но както помощни функции, можем да си имплементираме и други + // оператори + String& operator+=(const String& other); + + char operator[](unsigned index) const; + + const char* te() const { + return str; + } + + struct IndexRange { + unsigned start; + unsigned end; + + IndexRange(unsigned index); + IndexRange& operator,(const IndexRange& rhs); + }; + String operator[](IndexRange range) const; + + // Алтернативно, може да създадем селектори + // GetStr който връща str указателя и GetLength, + // и тези функции няма да е нужно да са приятелски + friend bool operator==(const String& lhs, const String& rhs); + friend bool operator!=(const String& lhs, const String& rhs); + friend bool operator<(const String& lhs, const String& rhs); + friend bool operator<=(const String& lhs, const String& rhs); + friend bool operator>(const String& lhs, const String& rhs); + friend bool operator>=(const String& lhs, const String& rhs); + friend bool operator<<(const String& lhs, const String& rhs); + friend bool operator>>(const String& lhs, const String& rhs); +}; + +String operator+(const String& lhs, const String& rhs); + +#endif /* _STRING */ -- cgit v1.3.1-23-gd82d