Website Summary Files Commits Branches @commit @diff @stats
path: root / Week01 / Exercise03 / stringHelpers.cpp
diff options
context:
space:
mode:
Commitfcf38e62e8160f2c9901bdfd33760afed28beb8d (patch)
Author
 Syndamia <kamen@syndamia.com>
2026-02-22 19:18:46 +0200
Committer
 Syndamia <kamen@syndamia.com>
2026-02-22 19:18:46 +0200
Files838fd5897d88700491a389cdf6837e35da3347ae /Week01/Exercise03/stringHelpers.cpp
oop-2025-solutions-fcf38e62e8160f2c9901bdfd33760afed28beb8d.tar
oop-2025-solutions-fcf38e62e8160f2c9901bdfd33760afed28beb8d.tar.gz
oop-2025-solutions-fcf38e62e8160f2c9901bdfd33760afed28beb8d.zip
Parentc365ede952f852c6e8feb92fc3a0766186f989f1 (diff)
feat(Week01): Add solutions
1 files changed, 74 insertions, 0 deletions
-rw-r--r--Week01/Exercise03/stringHelpers.cpp74
diff --git a/Week01/Exercise03/stringHelpers.cpp b/Week01/Exercise03/stringHelpers.cpp
new file mode 100644
index 0000000..ee9e691
--- /dev/null
+++ b/Week01/Exercise03/stringHelpers.cpp
@@ -0,0 +1,74 @@
+#include "stringHelpers.h"
+
+char* newString(unsigned length) {
+ return new char[length + 1];
+}
+
+// Тази функция е локална: не можем да я използваме в друг файл!
+unsigned stringLength(const char* string) {
+ if (string == nullptr)
+ return 0;
+
+ unsigned length = 0;
+
+ while (*string != '\0') {
+ ++length;
+ ++string;
+ }
+
+ return length;
+}
+
+char* newString(const char* string) {
+ if (string == nullptr)
+ return nullptr;
+
+ unsigned length = stringLength(string);
+
+ char* str = newString(length);
+
+ // Правим <= length, за да пренесем и терминиращата нула
+ for (unsigned i = 0; i <= length; ++i) {
+ str[i] = string[i];
+ }
+
+ return str;
+}
+
+char* concatStrings(const char* first, const char* second, const char* separator) {
+ unsigned length = stringLength(first) + stringLength(separator) + stringLength(second);
+
+ char* str = newString(length);
+ unsigned i = 0;
+
+ if (first != nullptr) {
+ while (*first != '\0' && i < length) {
+ str[i] = *first;
+ ++first;
+ ++i;
+ }
+ }
+
+ if (separator != nullptr) {
+ while (*separator != '\0' && i < length) {
+ str[i] = *separator;
+ ++separator;
+ ++i;
+ }
+ }
+
+ if (second != nullptr) {
+ while (*second != '\0' && i < length) {
+ str[i] = *second;
+ ++second;
+ ++i;
+ }
+ }
+
+ return str;
+}
+
+void deleteString(char*& string) {
+ delete[] string;
+ string = nullptr;
+}