Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define FOR(i, l, k) for (int i = l; i < k; i++)
- using namespace std;
- string st;
- char to_char(string::iterator it){
- return *it;
- }
- vector<pair<string::iterator, string::iterator>> split(string::iterator begin, string::iterator end, string sumbols)
- {
- vector<pair<string::iterator, string::iterator>> arr;
- auto now = begin;
- int lvl = 0;
- for (auto it = begin; it != end; it++)
- {
- if (find(sumbols.begin(), sumbols.end(), *it) != sumbols.end() && lvl == 0)
- {
- arr.push_back({now, it});
- now = it + 1;
- }
- else if (*it == '(')
- lvl++;
- else if (*it == ')')
- lvl--;
- }
- arr.push_back({now, end});
- return arr;
- }
- string solve(string::iterator begin, string::iterator end)
- {
- string out = "";
- vector<pair<string::iterator, string::iterator>> arr = split(begin, end, "+-");
- if (arr.size() == 1)
- { //Если строка формата a*b/c
- arr = split(begin, end, "*/");
- if (arr.size() == 1)
- { //Если строка формата a
- if(*begin == '(')
- {//Если строка формата (a)
- begin++;
- end--;
- out += solve(begin, end);
- }
- else
- {//Если строка формата 1
- out += st.substr(begin - st.begin(), end - begin);
- out += '\n';
- }
- }
- else
- { //Если строка формата a*b/c
- out += solve(arr[0].first, arr[0].second);
- for (int i = 1; i < arr.size(); i++)
- {
- out += solve(arr[i].first, arr[i].second);
- out += *(arr[i].first - 1);
- out += '\n';
- }
- }
- }
- else
- { //Если строка формата a+b-c
- out += solve(arr[0].first, arr[0].second);
- for (int i = 1; i < arr.size(); i++)
- {
- out += solve(arr[i].first, arr[i].second);
- out += *(arr[i].first - 1);
- out += '\n';
- }
- }
- return out;
- }
- int main()
- {
- cin >> st;
- for(auto i : solve(st.begin(), st.end())){
- if(i == '(' || i == ')')
- continue;
- cout << i;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement