Advertisement
Guest User

Untitled

a guest
Apr 25th, 2019
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.35 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. #define FOR(i, l, k) for (int i = l; i < k; i++)
  4.  
  5. using namespace std;
  6.  
  7. string st;
  8.  
  9. char to_char(string::iterator it){
  10.     return *it;
  11. }
  12.  
  13. vector<pair<string::iterator, string::iterator>> split(string::iterator begin, string::iterator end, string sumbols)
  14. {
  15.     vector<pair<string::iterator, string::iterator>> arr;
  16.     auto now = begin;
  17.     int lvl = 0;
  18.     for (auto it = begin; it != end; it++)
  19.     {
  20.         if (find(sumbols.begin(), sumbols.end(), *it) != sumbols.end() && lvl == 0)
  21.         {
  22.             arr.push_back({now, it});
  23.             now = it + 1;
  24.         }
  25.         else if (*it == '(')
  26.             lvl++;
  27.         else if (*it == ')')
  28.             lvl--;
  29.     }
  30.     arr.push_back({now, end});
  31.     return arr;
  32. }
  33.  
  34. string solve(string::iterator begin, string::iterator end)
  35. {
  36.     string out = "";
  37.     vector<pair<string::iterator, string::iterator>> arr = split(begin, end, "+-");
  38.     if (arr.size() == 1)
  39.     { //Если строка формата a*b/c
  40.         arr = split(begin, end, "*/");
  41.         if (arr.size() == 1)
  42.         { //Если строка формата a
  43.             if(*begin == '(')
  44.             {//Если строка формата (a)
  45.                 begin++;
  46.                 end--;
  47.                 out += solve(begin, end);
  48.             }
  49.             else
  50.             {//Если строка формата 1
  51.                 out += st.substr(begin - st.begin(), end - begin);
  52.                 out += '\n';
  53.             }
  54.         }
  55.         else
  56.         { //Если строка формата a*b/c
  57.             out += solve(arr[0].first, arr[0].second);
  58.             for (int i = 1; i < arr.size(); i++)
  59.             {
  60.                 out += solve(arr[i].first, arr[i].second);
  61.                 out += *(arr[i].first - 1);
  62.                 out += '\n';
  63.             }
  64.         }
  65.     }
  66.     else
  67.     { //Если строка формата a+b-c
  68.         out += solve(arr[0].first, arr[0].second);
  69.         for (int i = 1; i < arr.size(); i++)
  70.         {
  71.             out += solve(arr[i].first, arr[i].second);
  72.             out += *(arr[i].first - 1);
  73.             out += '\n';
  74.         }
  75.     }
  76.     return out;
  77. }
  78.  
  79. int main()
  80. {
  81.     cin >> st;
  82.     for(auto i : solve(st.begin(), st.end())){
  83.         if(i == '(' || i == ')')
  84.             continue;
  85.         cout << i;
  86.     }
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement