Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Подаётся строка с алгоритмическим выражение,
- * с целыми числами и операциями '+' '-' '*' '/' и 'скобки'
- * Выводом будет Верное ли арифметическое выражение по синтаксису
- * 5+3 верно
- * 5+ неверно
- * )(5+3 неверно
- * 5**3 неверно
- */
- #include <iostream>
- #include <string>
- using namespace std;
- bool checkBkt(string myString) //задается функция checkBkt, вида истина-ложь, проверка скобок
- {
- bool checkResult = true;
- const char* c_str = myString.c_str();
- auto sizeString = myString.size();
- size_t countOpenBkt = 0;
- size_t countCloseBkt = 0;
- for(size_t i = 0; i < sizeString; ++i)
- {
- if (c_str[i] == '(')
- {
- ++countOpenBkt;
- }
- if (c_str[i] == ')')
- {
- ++countCloseBkt;
- if (countOpenBkt == 0 || (countCloseBkt > countOpenBkt))
- {
- checkResult = false;
- }
- }
- }
- if (countCloseBkt != countOpenBkt)
- {
- checkResult = false;
- }
- return checkResult;
- }
- bool checkMathSymbol(const char* c_str, size_t iterator) //проверка мат.символа
- {
- bool mathSymbol;
- if (c_str[iterator] == '-' || c_str[iterator] == '+' || c_str[iterator] == '*' || c_str[iterator] == '/')
- {
- mathSymbol = true;
- }
- else
- {
- mathSymbol = false;
- }
- return mathSymbol;
- }
- bool chechMath(string myString)
- {
- bool checkResult = true;
- size_t sizeString = myString.size();
- const char* c_str = myString.c_str();
- if (checkMathSymbol(c_str, 0) && c_str[0] != '-') /* мат.символ не может быть первым, за исключением минуса */
- return false;
- if (checkMathSymbol(c_str, sizeString - 1)) /* мат.символ не может быть последним */
- return false;
- for (size_t i = 0; i < sizeString; ++i)
- {
- if (i != sizeString)
- if (checkMathSymbol(c_str, i) && checkMathSymbol(c_str, i + 1)) /* два мат.символа подряд */
- return false;
- if (i != 0)
- if (checkMathSymbol(c_str, i) && checkMathSymbol(c_str, i - 1)) /* два мат.символа подряд */
- return false;
- }
- return checkResult;
- }
- int main()
- {
- setlocale(0, "RUS");
- string symbols;
- int score;
- cout << "Сколько математических выражений хотите проверить?" << "\n";
- cin >> score;
- for (int i = 0; i < score; ++i)
- {
- cout << "Введите математическое выражение для проверки на правильность синтаксиса" << "\n";
- cin >> symbols;
- cout << symbols << "\n \n";
- bool resultBkt = checkBkt(symbols);
- bool resultMath = chechMath(symbols);
- if (resultBkt == true && resultMath == true)
- {
- cout << "Данное выражение действительно" << "\n";
- }
- else
- {
- cout << "Это выражение не действительно" << "\n";
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement