diff --git a/homework_01/task_01/src/main.cpp b/homework_01/task_01/src/main.cpp index 0b3dcb2..24c8952 100644 --- a/homework_01/task_01/src/main.cpp +++ b/homework_01/task_01/src/main.cpp @@ -1,10 +1,11 @@ #include - #include int main() { - for (const auto& word : SplitString("asdas das das fgag (adasd 1fas)")) { - std::cout << word << "\n"; + std::string line; + line = "a\na\ta a"; + for (const auto& word : SplitString(line)) { + std::cout << word << '\n'; } return 0; } diff --git a/homework_01/task_01/src/utils.cpp b/homework_01/task_01/src/utils.cpp index a6989bd..cd30430 100644 --- a/homework_01/task_01/src/utils.cpp +++ b/homework_01/task_01/src/utils.cpp @@ -1,7 +1,44 @@ #include "utils.hpp" -#include +#include +#include +#include +#include +#include +using namespace std; std::vector SplitString(const std::string& data) { - return {}; + std::vector v; + std::string buff = ""; + bool flag = false; //скобки закрыты (или их нет) + // cout << size(data) << endl; + for (int i = 0; i < size(data); ++i) { + if (data[i] == '(') { + flag = true; //скобки открыты + } else if (data[i] == ')') { + flag = false; //скобки закрыты + } + if (((data[i] != ' ') and (data[i] != '\t')) or (flag == true)) { + buff += data[i]; + } + // cout << "Data" << i << " : " << data[i] << endl; + // cout << "Buff: " << buff << endl; + if (flag == false) { + if ((data[i] == ' ') or (data[i] == '\t') or (i + 1 >= size(data))) { + if (buff != "") { + v.push_back(buff); + buff = ""; + } + } + } else { + if (i + 1 >= size(data)) { + if (buff != "") { + v.push_back(buff); + buff = ""; + } + } + } + } + // std::cout << "Size of vector: " << v.size() << "\n"; + return v; } diff --git a/homework_01/task_02/src/main.cpp b/homework_01/task_02/src/main.cpp index 72a6f13..f160237 100644 --- a/homework_01/task_02/src/main.cpp +++ b/homework_01/task_02/src/main.cpp @@ -1,10 +1,13 @@ -#include +#include +#include +#include +#include #include - +using namespace std; int main() { - std::string data; - std::getline(std::cin, data); - std::cout << Calculate(data); + cout << "Itog:" << endl; + cout << Calculate("8/0") << endl; + cout << Calculate("8 / 0") << endl; return 0; } diff --git a/homework_01/task_02/src/utils.cpp b/homework_01/task_02/src/utils.cpp index ebc7ffc..cbe7b88 100644 --- a/homework_01/task_02/src/utils.cpp +++ b/homework_01/task_02/src/utils.cpp @@ -1,7 +1,97 @@ #include "utils.hpp" +#include + +#include +#include #include +#include +#include +using namespace std; + +std::vector SplitString(const std::string& data) { + std::vector v; + std::string buff = ""; + bool flag = false; + for (int i = 0; i < size(data); ++i) { + if (data[i] == '(') { + flag = true; + } else if (data[i] == ')') { + flag = false; + } + if (((data[i] != ' ') and (data[i] != '\t') and (data[i] != '+') and + (data[i] != '-') and (data[i] != '*') and (data[i] != '/')) or + (flag == true)) { + buff += data[i]; + } + if (flag == false) { + if ((data[i] == ' ') or (data[i] == '\t') or (data[i] == '+') or + (data[i] == '-') or (data[i] == '*') or (data[i] == '/') or + (i + 1 >= size(data))) { + if (buff != "") { + v.push_back(buff); + buff = ""; + } + if ((data[i] == '+') or (data[i] == '-') or (data[i] == '*') or + (data[i] == '/')) { + buff += data[i]; + v.push_back(buff); + buff = ""; + } + } + } else { + if (i + 1 >= size(data)) { + if (buff != "") { + v.push_back(buff); + buff = ""; + } + } + } + } + return v; +} int Calculate(const std::string& data) { - return 0; + int i = 0; + int buff_int = 0; + std::string znak = ""; + int rez = 0; + vector chisla; + vector r = SplitString(data); + for (i = 0; i < r.size(); ++i) { + cout << r[i] << endl; + if ((r[i] != "+") and (r[i] != "-") and (r[i] != "*") and (r[i] != "/")) { + chisla.push_back(stoi(r[i])); + } else { + znak = r[i]; + } + } + if (!chisla.empty() and !znak.empty()) + rez = chisla[0]; + else { + cout << "Error" << endl; + rez = -1; + } + if (!chisla.empty()) { + for (i = 1; i < chisla.size(); ++i) { + if (znak == "+") { + rez += chisla[i]; + } + if (znak == "-") { + rez -= chisla[i]; + } + if (znak == "*") { + rez *= chisla[i]; + } + if (znak == "/") { + if (chisla[i] != 0) + rez /= chisla[i]; + else { + cout << "Delit na Nol nelzya!" << endl; + rez = -1; + } + } + } + } + return rez; } diff --git a/homework_01/task_02/src/utils.hpp b/homework_01/task_02/src/utils.hpp index f1bceeb..d185005 100644 --- a/homework_01/task_02/src/utils.hpp +++ b/homework_01/task_02/src/utils.hpp @@ -5,3 +5,4 @@ #include int Calculate(const std::string& data); +std::vector SplitString(const std::string& data);