Website Summary Files Commits Branches @commit @diff @stats
path: root / Utils / Kindle / string.cpp
diff options
context:
space:
mode:
Commit40f7cc8f54d0c221a391457fd38a44d0633aa088 (patch)
Author
 angeld55 <angel_dimitriev@abv.bg>
2022-05-16 14:05:08 +0300
Committer
 angeld55 <angel_dimitriev@abv.bg>
2022-05-16 14:05:08 +0300
Files29fecbef2da1e832f3f8e9e23db6fffe35d7ddc6 /Utils/Kindle/string.cpp
Object-oriented_programming_FMI-40f7cc8f54d0c221a391457fd38a44d0633aa088.tar
Object-oriented_programming_FMI-40f7cc8f54d0c221a391457fd38a44d0633aa088.tar.gz
Object-oriented_programming_FMI-40f7cc8f54d0c221a391457fd38a44d0633aa088.zip
Parentde7b4d3f7ac3ecd42ca336b0d477712a462d27ee (diff)
fixed typo in folder name
1 files changed, 158 insertions, 0 deletions
-rw-r--r--Utils/Kindle/string.cpp158
diff --git a/Utils/Kindle/string.cpp b/Utils/Kindle/string.cpp
new file mode 100644
index 0000000..083ce9c
--- /dev/null
+++ b/Utils/Kindle/string.cpp
@@ -0,0 +1,158 @@
+#include "string.h"
+#include <cstring>
+#include <iostream>
+
+#pragma warning(disable : 4996)
+
+void string::copyFrom(const string& other)
+{
+ str = new char[strlen(other.str) + 1];
+ strcpy(str, other.str);
+ size = other.size;
+}
+void string::free()
+{
+ delete[] str;
+}
+
+string::string()
+{
+ str = new char[1];
+ str[0] = '\0';
+ size = 0;
+}
+
+string::string(const char* data)
+{
+ if (data == nullptr)
+ {
+ str = new char[1];
+ str[0] = '\0';
+ size = 0;
+ }
+ else
+ {
+ size = strlen(data);
+ str = new char[size + 1];
+ strcpy(str, data);
+ }
+}
+
+string::string(const string& other)
+{
+ copyFrom(other);
+}
+string& string::operator=(const string& other)
+{
+ if (this != &other)
+ {
+ free();
+ copyFrom(other);
+ }
+ return *this;
+}
+string::~string()
+{
+ free();
+}
+
+
+size_t string::getSize() const
+{
+ return size;
+}
+void string::concat(const string& other)
+{
+ char* temp = new char[getSize() + other.getSize() + 1];
+ strcpy(temp, str);
+ strcat(temp, other.str);
+
+ delete[] str;
+ str = temp;
+ size = size + other.getSize();
+}
+
+const char* string::c_str() const
+{
+ return str;
+}
+
+string& string::operator+=(const string& other)
+{
+ concat(other);
+ return *this;
+}
+
+void string::getLine(std::istream& outFile)
+{
+ delete[] str;
+ char buff[1024];
+
+ outFile.getline(buff, 1024, '\n');
+ size_t len = strlen(buff);
+ str = new char[len + 1];
+ for (size_t i = 0; i < len; i++)
+ str[i] = buff[i];
+ str[len] = '\0';
+ size = len;
+}
+
+string operator+(const string& lhs, const string& rhs)
+{
+ string copyOfLeft(lhs);
+ copyOfLeft += rhs;
+ return copyOfLeft;
+}
+
+std::ostream& operator<<(std::ostream& stream, const string& str)
+{
+ stream << str.str;
+ return stream;
+}
+
+std::istream& operator>>(std::istream& stream, string& str)
+{
+ delete[] str.str;
+ char buff[1024];
+ stream >> buff;
+
+ str.size = strlen(buff);
+ str.str = new char[str.size + 1];
+ strcpy(str.str, buff);
+
+ return stream;
+}
+
+bool operator==(const string& lhs, const string& rhs)
+{
+ return strcmp(lhs.c_str(), rhs.c_str()) == 0;
+}
+bool operator<=(const string& lhs, const string& rhs)
+{
+ return strcmp(lhs.c_str(), rhs.c_str()) <= 0;
+
+}
+bool operator<(const string& lhs, const string& rhs)
+{
+ return strcmp(lhs.c_str(), rhs.c_str()) < 0;
+
+}
+
+string::string(string&& otherString)
+{
+ str = otherString.str;
+ size = otherString.size;
+ otherString.str = nullptr;
+}
+
+string& string::operator=(string&& otherString)
+{
+ if (this != &otherString)
+ {
+ free();
+ str = otherString.str;
+ otherString.str = nullptr;
+ size = otherString.size;
+ }
+ return *this;
+} \ No newline at end of file