SHARE
TWEET

Untitled

msu_goncharenko Dec 8th, 2019 72 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <string>
  3. #include <stack>
  4. #include <cmath>
  5. #include <set>
  6.  
  7. using namespace std;
  8.  
  9. string convert(string a)
  10. {
  11.     string str;
  12.     for(int i = 0; i<a.size(); i++)
  13.     {
  14.         if(a[i]!=' ') str.insert(str.end(), a[i]);
  15.     }
  16.     return str;
  17. }
  18. // проверка корректности выражения (последовательности чисел и знаков операции)
  19. bool correct_operation_signs(string a)
  20. {
  21.    bool rightness = true; // булева переменная для фиксирования ошибочного выражения
  22.    set<char> operand = {'+', '*', '/', '-', '^'};
  23.    
  24.    if (operand.count(a[0])!= 0 && a[0]!='-') // проверка символа на наличие операнда
  25.    {
  26.        rightness = false;
  27.    }
  28.    
  29.    else if (operand.count(a[a.size()]) != 0)
  30.    {
  31.        rightness = false;
  32.    }
  33.     /* если всё верно (в начале и в конце стоят не знаки), то выполняется цикл,
  34.      который прогоняет строку на предмет двух символов подряд. */
  35.    else
  36.    {
  37.        for (int i = 0; i < a.size(); i++)
  38.        {
  39.            if (operand.count(a[i])!=0 && operand.count(a[i+1])!=0)
  40.            {
  41.                rightness = false;
  42.            }
  43.            if((a[i] == '/') && (a[i+1] == '0')) // случай деления на 0
  44.            {
  45.                rightness = false;
  46.            }
  47.        }
  48.    }
  49.     return(rightness); // если нигде ошибки не было, то rightness=true
  50. }
  51.  
  52. // проверка корректности выражения (последовательности скруглых скобок)
  53. bool correct_parenthesis(string a)
  54. {
  55.     bool rightness = true; // булева переменная для фиксирования ошибочного выражения
  56.     stack<char> st; // стек в котором хранятся скобки
  57.     set<char> opening_parenthesis = {'(', '{', '['};
  58.     set<char> closing_parenthesis = { ')', '}', ']'};
  59.    
  60.     for(int i = 0; i < a.size(); i++)
  61.     {
  62.        if (closing_parenthesis.count(a[i]) != 0)
  63.        {
  64.            if (a[i] == ')')
  65.            {
  66.                if(st.size()!=0)
  67.                {
  68.                    if (st.top() == '(')
  69.                    {
  70.                        st.pop();
  71.                    }
  72.                    else
  73.                    {
  74.                        rightness = false;
  75.                        break;
  76.                    }
  77.                }
  78.                else
  79.                {
  80.                    rightness = false;
  81.                    break;
  82.                }
  83.            }
  84.            if (a[i] == '}')
  85.            {
  86.                if(st.size()!=0)
  87.                {
  88.                    if (st.top() == '{')
  89.                    {
  90.                        st.pop();
  91.                    } else
  92.                    {
  93.                        rightness = false;
  94.                        break;
  95.                    }
  96.                }
  97.                else
  98.                {
  99.                    rightness = false;
  100.                    break;
  101.  
  102.                }
  103.            }
  104.            if (a[i] == ']')
  105.            {
  106.                if(st.size()!=0)
  107.                {
  108.                    if (st.top() == '[')
  109.                    {
  110.                        st.pop();
  111.                    }
  112.                    else
  113.                    {
  114.                        rightness = false;
  115.                        break;
  116.                    }
  117.                }
  118.                else
  119.                {
  120.                    rightness = false;
  121.                    break;
  122.                }
  123.            }
  124.        }
  125.        else if (opening_parenthesis.count(a[i]) != 0)
  126.        {
  127.            st.push(a[i]);
  128.        }
  129.     }
  130.    
  131.     if(st.size()>0 && rightness==true)
  132.     {
  133.         rightness = false;
  134.     }
  135.    
  136.     return rightness;
  137. }
  138.  
  139. int main()
  140. {
  141.     string str; // исходная посл-ть
  142.     getline(cin, str);
  143.     str = convert(str);
  144.    
  145.     if (correct_operation_signs(str) &&  correct_parenthesis(str))
  146.     {
  147.         cout << "Correct" << endl;
  148.         return 0;
  149.     }
  150.    
  151.     cout << "Incorrect" << endl;
  152.     return 0;
  153. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top