Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <stack>
- #include <cmath>
- #include <set>
- using namespace std;
- string convert(string a)
- {
- string str;
- for(int i = 0; i<a.size(); i++)
- {
- if(a[i]!=' ') str.insert(str.end(), a[i]);
- }
- return str;
- }
- // проверка корректности выражения (последовательности чисел и знаков операции)
- bool correct_operation_signs(string a)
- {
- bool rightness = true; // булева переменная для фиксирования ошибочного выражения
- set<char> operand = {'+', '*', '/', '-', '^'};
- if (operand.count(a[0])!= 0 && a[0]!='-') // проверка символа на наличие операнда
- {
- rightness = false;
- }
- else if (operand.count(a[a.size()]) != 0)
- {
- rightness = false;
- }
- /* если всё верно (в начале и в конце стоят не знаки), то выполняется цикл,
- который прогоняет строку на предмет двух символов подряд. */
- else
- {
- for (int i = 0; i < a.size(); i++)
- {
- if (operand.count(a[i])!=0 && operand.count(a[i+1])!=0)
- {
- rightness = false;
- }
- if((a[i] == '/') && (a[i+1] == '0')) // случай деления на 0
- {
- rightness = false;
- }
- }
- }
- return(rightness); // если нигде ошибки не было, то rightness=true
- }
- // проверка корректности выражения (последовательности скруглых скобок)
- bool correct_parenthesis(string a)
- {
- bool rightness = true; // булева переменная для фиксирования ошибочного выражения
- stack<char> st; // стек в котором хранятся скобки
- set<char> opening_parenthesis = {'(', '{', '['};
- set<char> closing_parenthesis = { ')', '}', ']'};
- for(int i = 0; i < a.size(); i++)
- {
- if (closing_parenthesis.count(a[i]) != 0)
- {
- if (a[i] == ')')
- {
- if(st.size()!=0)
- {
- if (st.top() == '(')
- {
- st.pop();
- }
- else
- {
- rightness = false;
- break;
- }
- }
- else
- {
- rightness = false;
- break;
- }
- }
- if (a[i] == '}')
- {
- if(st.size()!=0)
- {
- if (st.top() == '{')
- {
- st.pop();
- } else
- {
- rightness = false;
- break;
- }
- }
- else
- {
- rightness = false;
- break;
- }
- }
- if (a[i] == ']')
- {
- if(st.size()!=0)
- {
- if (st.top() == '[')
- {
- st.pop();
- }
- else
- {
- rightness = false;
- break;
- }
- }
- else
- {
- rightness = false;
- break;
- }
- }
- }
- else if (opening_parenthesis.count(a[i]) != 0)
- {
- st.push(a[i]);
- }
- }
- if(st.size()>0 && rightness==true)
- {
- rightness = false;
- }
- return rightness;
- }
- int main()
- {
- string str; // исходная посл-ть
- getline(cin, str);
- str = convert(str);
- if (correct_operation_signs(str) && correct_parenthesis(str))
- {
- cout << "Correct" << endl;
- return 0;
- }
- cout << "Incorrect" << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement