Advertisement
Guest User

kod

a guest
Nov 22nd, 2019
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.99 KB | None | 0 0
  1. /*
  2. * Подаётся строка с алгоритмическим выражение,
  3. * с целыми числами и операциями '+' '-' '*' '/' и 'скобки'
  4. * Выводом будет Верное ли арифметическое выражение по синтаксису
  5. * 5+3 верно
  6. * 5+ неверно
  7. * )(5+3 неверно
  8. * 5**3 неверно
  9. */
  10.  
  11.  
  12. #include <iostream>
  13. #include <string>
  14. using namespace std;
  15.  
  16. bool checkBkt(string myString) //задается функция checkBkt, вида истина-ложь, проверка скобок
  17. {
  18.     bool checkResult = true;
  19.     const char* c_str = myString.c_str();
  20.     auto sizeString = myString.size();
  21.     size_t countOpenBkt = 0;
  22.     size_t countCloseBkt = 0;
  23.     for(size_t i = 0; i < sizeString; ++i)
  24.     {
  25.         if (c_str[i] == '(')
  26.         {
  27.             ++countOpenBkt;
  28.         }
  29.         if (c_str[i] == ')')
  30.         {
  31.             ++countCloseBkt;
  32.             if (countOpenBkt == 0 || (countCloseBkt > countOpenBkt))
  33.             {
  34.                 checkResult = false;
  35.             }
  36.         }
  37.     }
  38.     if (countCloseBkt != countOpenBkt)
  39.     {
  40.         checkResult = false;
  41.     }
  42.     return checkResult;
  43. }
  44. bool checkMathSymbol(const char* c_str, size_t iterator) //проверка мат.символа
  45. {
  46.     bool mathSymbol;
  47.     if (c_str[iterator] == '-' || c_str[iterator] == '+' || c_str[iterator] == '*' || c_str[iterator] == '/')
  48.     {
  49.         mathSymbol = true;
  50.     }
  51.     else
  52.     {
  53.         mathSymbol = false;
  54.     }
  55.     return mathSymbol;
  56. }
  57. bool chechMath(string myString)
  58. {
  59.     bool checkResult = true;
  60.     size_t sizeString = myString.size();
  61.     const char* c_str = myString.c_str();
  62.     if (checkMathSymbol(c_str, 0) && c_str[0] != '-') /* мат.символ не может быть первым, за исключением минуса */
  63.         return false;
  64.     if (checkMathSymbol(c_str, sizeString - 1)) /* мат.символ не может быть последним */
  65.         return false;
  66.     for (size_t i = 0; i < sizeString; ++i)
  67.     {
  68.         if (i != sizeString)
  69.             if (checkMathSymbol(c_str, i) && checkMathSymbol(c_str, i + 1)) /* два мат.символа подряд */
  70.                 return false;
  71.         if (i != 0)
  72.             if (checkMathSymbol(c_str, i) && checkMathSymbol(c_str, i - 1)) /* два мат.символа подряд */
  73.                 return false;
  74.     }
  75.     return checkResult;
  76. }
  77.  
  78. int main()
  79. {
  80.     setlocale(0, "RUS");
  81.     string symbols;
  82.     int score;
  83.     cout << "Сколько математических выражений хотите проверить?" << "\n";
  84.     cin >> score;
  85.     for (int i = 0; i < score; ++i)
  86.     {
  87.         cout << "Введите математическое выражение для проверки на правильность синтаксиса" << "\n";
  88.         cin >> symbols;
  89.         cout << symbols << "\n \n";
  90.         bool resultBkt = checkBkt(symbols);
  91.         bool resultMath = chechMath(symbols);
  92.         if (resultBkt == true && resultMath == true)
  93.         {
  94.             cout << "Данное выражение действительно" << "\n";
  95.         }
  96.         else
  97.         {
  98.             cout << "Это выражение не действительно" << "\n";
  99.         }
  100.     }
  101.     return 0;
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement