From f0f8f543968843277b4ab66e9cb67b7113ef3d15 Mon Sep 17 00:00:00 2001 From: unraccoon Date: Wed, 8 Oct 2025 12:16:46 +0300 Subject: [PATCH 1/4] add lib stack and base methods and data --- CMakeLists.txt | 2 ++ stack_lib/CMakeLists.txt | 1 + stack_lib/stack_lib.cpp | 0 stack_lib/stack_lib.h | 56 ++++++++++++++++++++++++++++++++++++++++ tests/test_stack_lib.cpp | 0 5 files changed, 59 insertions(+) create mode 100644 stack_lib/CMakeLists.txt create mode 100644 stack_lib/stack_lib.cpp create mode 100644 stack_lib/stack_lib.h create mode 100644 tests/test_stack_lib.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 2ed05fc1..b268b1c4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,6 +14,8 @@ include(cmake/function.cmake) # подхватываем функции, # и для создания исполняемого проекта в отдельные функции add_subdirectory(lib_easy_example) # подключаем дополнительный CMakeLists.txt из подкаталога с именем lib_easy_example +add_subdirectory(stack_lib) + add_subdirectory(main) # подключаем дополнительный CMakeLists.txt из подкаталога с именем main option(BTEST "build test?" ON) # указываем подключаем ли google-тесты (ON или YES) или нет (OFF или NO) diff --git a/stack_lib/CMakeLists.txt b/stack_lib/CMakeLists.txt new file mode 100644 index 00000000..9b7ffcca --- /dev/null +++ b/stack_lib/CMakeLists.txt @@ -0,0 +1 @@ +create_project_lib(stack_lib) \ No newline at end of file diff --git a/stack_lib/stack_lib.cpp b/stack_lib/stack_lib.cpp new file mode 100644 index 00000000..e69de29b diff --git a/stack_lib/stack_lib.h b/stack_lib/stack_lib.h new file mode 100644 index 00000000..92b4266c --- /dev/null +++ b/stack_lib/stack_lib.h @@ -0,0 +1,56 @@ +#pragma once +#include + + +template +class Stack { + T* _data; + int _size, _top; +public: + //Stack(int _size); + void push(const T& val); + void pop(); + inline T top() const; + inline bool is_empty() const noexcept; + inline bool is_full() const noexcept; + void clear() noexcept; +}; + +template +void Stack::push(const T& val) { + if (is_full()) { + throw std::logic_error("stack is full"); + } + _data[++_top] = val; +} + +template +void Stack::pop() { + if (is_empty()) { + throw std::logic_error("stack is empty"); + } + --_top; +} + +template +inline T Stack::top() const { + if (is_empty()) { + throw std::logic_error("stack is empty"); + } + return _data[_top]; +} + +template +inline bool Stack::is_empty() const noexcept { + return _top == -1; +} + +template +inline bool Stack::is_full() const noexcept { + return _top == _size - 1; +} + +template +void Stack::clear() noexcept { + _top = -1; +} diff --git a/tests/test_stack_lib.cpp b/tests/test_stack_lib.cpp new file mode 100644 index 00000000..e69de29b From 88f427b74f8a59bdb029340dd14f730e6ab2a8bc Mon Sep 17 00:00:00 2001 From: unraccoon Date: Wed, 22 Oct 2025 11:37:12 +0300 Subject: [PATCH 2/4] most of stack --- stack_lib/stack_lib.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stack_lib/stack_lib.h b/stack_lib/stack_lib.h index 92b4266c..35f4a8df 100644 --- a/stack_lib/stack_lib.h +++ b/stack_lib/stack_lib.h @@ -7,7 +7,7 @@ class Stack { T* _data; int _size, _top; public: - //Stack(int _size); + //Stack(int _size) void push(const T& val); void pop(); inline T top() const; From 585e29930a113967b6294041fe51f63072a9ea71 Mon Sep 17 00:00:00 2001 From: unraccoon Date: Wed, 22 Oct 2025 12:23:48 +0300 Subject: [PATCH 3/4] try add checkbreck --- checkbreckets/CMakeList.txt | 0 checkbreckets/checkbreckets.cpp | 0 checkbreckets/checkbreckets.h | 1 + checkbreckets/checkbreckets.vcxproj | 138 ++++++++++++++++++++ checkbreckets/checkbreckets.vcxproj.filters | 17 +++ checkbreckets/checkbreckets.vcxproj.user | 4 + 6 files changed, 160 insertions(+) create mode 100644 checkbreckets/CMakeList.txt create mode 100644 checkbreckets/checkbreckets.cpp create mode 100644 checkbreckets/checkbreckets.h create mode 100644 checkbreckets/checkbreckets.vcxproj create mode 100644 checkbreckets/checkbreckets.vcxproj.filters create mode 100644 checkbreckets/checkbreckets.vcxproj.user diff --git a/checkbreckets/CMakeList.txt b/checkbreckets/CMakeList.txt new file mode 100644 index 00000000..e69de29b diff --git a/checkbreckets/checkbreckets.cpp b/checkbreckets/checkbreckets.cpp new file mode 100644 index 00000000..e69de29b diff --git a/checkbreckets/checkbreckets.h b/checkbreckets/checkbreckets.h new file mode 100644 index 00000000..6f70f09b --- /dev/null +++ b/checkbreckets/checkbreckets.h @@ -0,0 +1 @@ +#pragma once diff --git a/checkbreckets/checkbreckets.vcxproj b/checkbreckets/checkbreckets.vcxproj new file mode 100644 index 00000000..a01ecaaf --- /dev/null +++ b/checkbreckets/checkbreckets.vcxproj @@ -0,0 +1,138 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + + 17.0 + Win32Proj + {e8f000ba-1e3c-48a7-88e2-f2640edfc98d} + checkbreckets + 10.0 + + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + + + + + + + + + + + + + + + + + + + + + + + Level3 + true + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + + + + diff --git a/checkbreckets/checkbreckets.vcxproj.filters b/checkbreckets/checkbreckets.vcxproj.filters new file mode 100644 index 00000000..153170c7 --- /dev/null +++ b/checkbreckets/checkbreckets.vcxproj.filters @@ -0,0 +1,17 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + \ No newline at end of file diff --git a/checkbreckets/checkbreckets.vcxproj.user b/checkbreckets/checkbreckets.vcxproj.user new file mode 100644 index 00000000..88a55094 --- /dev/null +++ b/checkbreckets/checkbreckets.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file From 68a570838f6a80ac0f208401cfded8474c3cd28f Mon Sep 17 00:00:00 2001 From: unraccoon Date: Wed, 29 Oct 2025 11:36:13 +0300 Subject: [PATCH 4/4] save checkbreckets --- CMakeLists.txt | 1 + checkbreckets/CMakeList.txt | 2 + checkbreckets/CMakeLists.txt | 2 + checkbreckets/checkbreckets.cpp | 33 +++++++ checkbreckets/checkbreckets.h | 95 +++++++++++++++++++++ checkbreckets/checkbreckets.vcxproj | 48 ++++++----- checkbreckets/checkbreckets.vcxproj.filters | 13 +++ checkbreckets/checkbreckets.vcxproj.user | 4 - stack_lib/stack_lib.h | 46 +++++++++- 9 files changed, 217 insertions(+), 27 deletions(-) create mode 100644 checkbreckets/CMakeLists.txt delete mode 100644 checkbreckets/checkbreckets.vcxproj.user diff --git a/CMakeLists.txt b/CMakeLists.txt index b268b1c4..66f63345 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,6 +15,7 @@ include(cmake/function.cmake) # подхватываем функции, add_subdirectory(lib_easy_example) # подключаем дополнительный CMakeLists.txt из подкаталога с именем lib_easy_example add_subdirectory(stack_lib) +add_subdirectory(checkbreckets) add_subdirectory(main) # подключаем дополнительный CMakeLists.txt из подкаталога с именем main diff --git a/checkbreckets/CMakeList.txt b/checkbreckets/CMakeList.txt index e69de29b..19c357b0 100644 --- a/checkbreckets/CMakeList.txt +++ b/checkbreckets/CMakeList.txt @@ -0,0 +1,2 @@ +create_project_lib(checkbreckets) +add_depend(checkbreckets stack_lib) \ No newline at end of file diff --git a/checkbreckets/CMakeLists.txt b/checkbreckets/CMakeLists.txt new file mode 100644 index 00000000..17e83972 --- /dev/null +++ b/checkbreckets/CMakeLists.txt @@ -0,0 +1,2 @@ +create_project_lib(Algorithms) +add_depend(Algorithms stack_lib ..\\stack_lib) diff --git a/checkbreckets/checkbreckets.cpp b/checkbreckets/checkbreckets.cpp index e69de29b..731b7f6d 100644 --- a/checkbreckets/checkbreckets.cpp +++ b/checkbreckets/checkbreckets.cpp @@ -0,0 +1,33 @@ +#pragma once +#include +#include "checkbreckets.h" + + +bool check_brackets(const std::string& val) { + int open_count = 0; + for (char c : val) { + if (c == '(' || c == '[' || c == '{') { + open_count++; + } + } + Stack stack(open_count + 1); + for (char c : val) { + if (c == '(' || c == '[' || c == '{') { + stack.push(c); + } + else if (c == ')' || c == ']' || c == '}') { + if (stack.is_empty()) { + return false; + } + char top = stack.top(); + if ((c == ')' && top == '(') || (c == ']' && top == '[') || (c == '}' && top == '{')) { + stack.pop(); + } + else { + return false; + } + } + } + + return stack.is_empty(); +} \ No newline at end of file diff --git a/checkbreckets/checkbreckets.h b/checkbreckets/checkbreckets.h index 6f70f09b..aa85daa3 100644 --- a/checkbreckets/checkbreckets.h +++ b/checkbreckets/checkbreckets.h @@ -1 +1,96 @@ #pragma once +#include +#include + +template +class Stack { + T* _data; + int _size, _top; +public: + Stack(int size = 100); + Stack(const Stack& other); + ~Stack(); + Stack& operator=(const Stack& other); + void push(const T& val); + void pop(); + inline T top() const; + inline bool is_empty() const noexcept; + inline bool is_full() const noexcept; + void clear() noexcept; + int capacity() const noexcept { return _size; } + int count() const noexcept { return _top + 1; } +}; + +template +Stack::Stack(int size) : _size(size > 0 ? size : 100), _top(-1) { + _data = new T[_size]; +} + +template +Stack::Stack(const Stack& other) : _size(other._size), _top(other._top) { + _data = new T[_size]; + for (int i = 0; i <= _top; ++i) { + _data[i] = other._data[i]; + } +} + + +template +Stack::~Stack() { + delete[] _data; +} + + +template +Stack& Stack::operator=(const Stack& other) { + if (this != &other) { + delete[] _data; + _size = other._size; + _top = other._top; + _data = new T[_size]; + for (int i = 0; i <= _top; ++i) { + _data[i] = other._data[i]; + } + } + return *this; +} + + +template +void Stack::push(const T& val) { + if (is_full()) { + throw std::logic_error("stack is full"); + } + _data[++_top] = val; +} + +template +void Stack::pop() { + if (is_empty()) { + throw std::logic_error("stack is empty"); + } + --_top; +} + +template +inline T Stack::top() const { + if (is_empty()) { + throw std::logic_error("stack is empty"); + } + return _data[_top]; +} + +template +inline bool Stack::is_empty() const noexcept { + return _top == -1; +} + +template +inline bool Stack::is_full() const noexcept { + return _top == _size - 1; +} + +template +void Stack::clear() noexcept { + _top = -1; +} diff --git a/checkbreckets/checkbreckets.vcxproj b/checkbreckets/checkbreckets.vcxproj index a01ecaaf..f4c3e651 100644 --- a/checkbreckets/checkbreckets.vcxproj +++ b/checkbreckets/checkbreckets.vcxproj @@ -17,7 +17,6 @@ Release x64 - 17.0 @@ -53,27 +52,24 @@ true Unicode - - + + + + + + + + + + + + + - - - - - - - - - - - - - - Level3 @@ -130,9 +126,21 @@ true - - + + + + + + + + + + + + {9fa79273-5cab-343e-a74d-9bde3288771f} + + - + \ No newline at end of file diff --git a/checkbreckets/checkbreckets.vcxproj.filters b/checkbreckets/checkbreckets.vcxproj.filters index 153170c7..6790918b 100644 --- a/checkbreckets/checkbreckets.vcxproj.filters +++ b/checkbreckets/checkbreckets.vcxproj.filters @@ -14,4 +14,17 @@ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + Исходные файлы + + + + + Исходные файлы + + + + + \ No newline at end of file diff --git a/checkbreckets/checkbreckets.vcxproj.user b/checkbreckets/checkbreckets.vcxproj.user deleted file mode 100644 index 88a55094..00000000 --- a/checkbreckets/checkbreckets.vcxproj.user +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/stack_lib/stack_lib.h b/stack_lib/stack_lib.h index 35f4a8df..831a17ac 100644 --- a/stack_lib/stack_lib.h +++ b/stack_lib/stack_lib.h @@ -1,21 +1,61 @@ #pragma once #include - +#include template class Stack { T* _data; int _size, _top; public: - //Stack(int _size) + Stack(int size = 100); + Stack(const Stack& other); + ~Stack(); + Stack& operator=(const Stack& other); void push(const T& val); void pop(); inline T top() const; inline bool is_empty() const noexcept; inline bool is_full() const noexcept; void clear() noexcept; + int capacity() const noexcept { return _size; } + int count() const noexcept { return _top + 1; } }; +template +Stack::Stack(int size) : _size(size > 0 ? size : 100), _top(-1) { + _data = new T[_size]; +} + +template +Stack::Stack(const Stack& other) : _size(other._size), _top(other._top) { + _data = new T[_size]; + for (int i = 0; i <= _top; ++i) { + _data[i] = other._data[i]; + } +} + + +template +Stack::~Stack() { + delete[] _data; +} + + +template +Stack& Stack::operator=(const Stack& other) { + if (this != &other) { + delete[] _data; + _size = other._size; + _top = other._top; + _data = new T[_size]; + for (int i = 0; i <= _top; ++i) { + _data[i] = other._data[i]; + } + } + return *this; +} + + template void Stack::push(const T& val) { if (is_full()) { @@ -53,4 +93,4 @@ inline bool Stack::is_full() const noexcept { template void Stack::clear() noexcept { _top = -1; -} +} \ No newline at end of file