Website Summary Files Commits Branches @commit @diff @stats
path: root / Sem. 15 / task2.cpp
diff options
context:
space:
mode:
1 files changed, 118 insertions, 0 deletions
-rw-r--r--Sem. 15/task2.cpp118
diff --git a/Sem. 15/task2.cpp b/Sem. 15/task2.cpp
new file mode 100644
index 0000000..603a50c
--- /dev/null
+++ b/Sem. 15/task2.cpp
@@ -0,0 +1,118 @@
+const int MAX_LEN = 100;
+
+int countWords(const char* text)
+{
+ bool wasLastCharSpace = true;
+ int wordCount = 0;
+ int len = strlen(text);
+
+ for (int i = 0; i < len; i++)
+ {
+ if (wasLastCharSpace && text[i] != ' ' )
+ {
+ wordCount++;
+ wasLastCharSpace = false;
+ }
+ else if (text[i] == ' ')
+ wasLastCharSpace = true;
+ }
+ return wordCount;
+
+}
+int getWordLength(const char* text, int start)
+{
+ int len = 0;
+ int index = start;
+
+ while (text[index] != ' ' && text[index] != '\0')
+ {
+ index++;
+ len++;
+ }
+ return len;
+}
+
+void copyChars(char* dest, const char* text, int start, int len)
+{
+
+ for (int i = start, index = 0; index < len; i++, index++)
+ dest[index] = text[i];
+
+ dest[len] = '\0';
+}
+void fillWords(char** words, const char* text)
+{
+ int len = strlen(text);
+ int currentWordIndex = 0;
+
+ for (int i = 0; i < len; i++)
+ {
+ if (text[i] == ' ')
+ continue;
+
+ int currentWordLen = getWordLength(text, i);
+
+ words[currentWordIndex] = new char[currentWordLen + 1]; //(**)
+
+ copyChars(words[currentWordIndex], text, i, currentWordLen);
+
+ currentWordIndex++;
+ i += currentWordLen;
+ }
+}
+
+void swap(char** arr, int i, int j)
+{
+ char* wordPtr = arr[i];
+ arr[i] = arr[j];
+ arr[j] = wordPtr;
+}
+void selectionSort(char** arr, int len)
+{
+ for (int pos = 0; pos < len - 1; pos++)
+ {
+ int minIndex = pos;
+ for (int i = pos; i < len; i++)
+ {
+ if (strcmp(arr[i], arr[minIndex]) < 0)
+ minIndex = i;
+ }
+ if (pos != minIndex)
+ swap(arr, pos, minIndex);
+ }
+}
+
+void free(char** words, int wordsCount)
+{
+ for (int i = 0; i < wordsCount; i++)
+ delete[] words[i]; // (**)
+ delete[] words; // (*)
+}
+
+
+bool hasDuplicatesWords(const char* text)
+{
+ int wordsCount = countWords(text);
+ char** words = new char*[wordsCount]; // (*)
+ fillWords(words, text);
+
+ selectionSort(words, wordsCount);
+
+ for (int i = 0; i < wordsCount - 1; i++)
+ {
+ if (strcmp(words[i], words[i + 1]) == 0)
+ return true;
+ }
+
+ return false;
+
+ free(words, wordCount);
+
+}
+int main()
+{
+ const char* text = " hello friends. how are you frienYds. ";
+
+ cout << hasDuplicatesWords(text);
+
+}