Advertisement
Okorosso

обратная польская запись

May 13th, 2021
614
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.02 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4.  
  5. using namespace std;
  6.  
  7. void splitString(string s, vector<string>& v) {
  8.     string temp = "";
  9.     for (int i = 0; i < s.length(); ++i) {
  10.         if (s[i] == ' ') {
  11.             v.push_back(temp);
  12.             temp = "";
  13.         }
  14.         else {
  15.             temp.push_back(s[i]);
  16.         }
  17.     }
  18.     v.push_back(temp);
  19. }
  20.  
  21. vector<int> calcRpn(const vector<string>& rpn) {
  22.     string operations = "-+/*";
  23.     vector<int> subArr;
  24.     if (rpn.size() < 1) {
  25.         return vector<int>{1, 1};
  26.     }
  27.  
  28.     if (rpn.size() == 1) {
  29.         subArr.push_back(stoi(rpn[0]));
  30.         return subArr;
  31.     }
  32.  
  33.     for (const string& item : rpn) {
  34.  
  35.         if (operations.find(item) == -1) {
  36.             subArr.push_back(stoi(item));
  37.         }
  38.         else {
  39.             int len = subArr.size();
  40.             if (len <= 1 or item.empty()) {
  41.                 return vector<int>{1, 1};
  42.             }
  43.             if (item == "*") {
  44.                 subArr[len - 2] = subArr[len - 2] * subArr[len - 1];
  45.             }
  46.             else if (item == "/") {
  47.                 if (subArr[len - 1] == 0)
  48.                     return vector<int>{1, 1};
  49.                 subArr[len - 2] = subArr[len - 2] / subArr[len - 1];
  50.             }
  51.             else if (item == "+") {
  52.                 subArr[len - 2] = subArr[len - 2] + subArr[len - 1];
  53.             }
  54.             else if (item == "-") {
  55.                 subArr[len - 2] = subArr[len - 2] - subArr[len - 1];
  56.             }
  57.             subArr.pop_back();
  58.         }
  59.     }
  60.     return subArr;
  61. }
  62.  
  63. int main() {
  64.     string toSplit;
  65.     getline(cin, toSplit);
  66.     string ops = "/ * - +";
  67.  
  68.    
  69.     if (toSplit.empty() || ops.find(toSplit) != -1) {
  70.         cout << "ERROR";
  71.         return 0;
  72.     }
  73.     vector<string> splittedVec;
  74.     splitString(toSplit, splittedVec);
  75.     vector<int> answ = calcRpn(splittedVec);
  76.     if (answ.size() > 1) {
  77.         cout << "ERROR";
  78.         return 0;
  79.     }
  80.    
  81.     cout << answ[0];
  82.     return 0;
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement