Advertisement
Guest User

Task 10

a guest
Jun 20th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.92 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. ///////////////////////////////////
  3. // TASK 10
  4. //Вводимый текст (например, арифметическое выражение) содержит многократно
  5. //вложенные круглые скобки. Исправить его, оставив скобки первого уровня
  6. //круглыми, второго – квадратными, далее – фигурными. Проверять правильность
  7. //введенной формулы
  8. ///////////////////////////////////
  9. using namespace std;
  10.  
  11. int main()
  12. {
  13.     vector<char> str;
  14.     FILE * f;
  15.     string file = "input.txt";
  16.     f = fopen(file, "r");
  17.     while(true)
  18.     {
  19.         char ch =getc(f);
  20.         if(ch==EOF)
  21.             break;
  22.         str.push_back(ch);
  23.     }
  24.     fclose(f);
  25.     int n = str.size();
  26.     deque<int> open;
  27.     int lvls[n]= {0};
  28.     int cur_lvl=0;
  29.     for (int i=0; i<n; i++)
  30.     {
  31.         if(str[i]=='(')
  32.         {
  33.             cur_lvl++;
  34.             open.push_back(i);
  35.             lvls[i] = cur_lvl;
  36.         }
  37.         if(str[i]==')')
  38.         {
  39.             if(open.size()==0)
  40.             {
  41.                 cout<<"INCORRECTLY\n";
  42.                 return 0;
  43.             }
  44.             else
  45.             {
  46.                 int last = open.front();
  47.                 open.pop_front();
  48.                 lvls[i] = -cur_lvl;
  49.                 cur_lvl--;
  50.             }
  51.         }
  52.     }
  53.     if(open.size()>0)
  54.     {
  55.         cout<<"INCORRECTLY\n";
  56.         return 0;
  57.     }
  58.     for (int i=0; i<n; i++)
  59.     {
  60.         if(lvls[i]==0)
  61.             cout<<str[i];
  62.         if(lvls[i]==1)
  63.             cout<<'(';
  64.         if(lvls[i]==-1)
  65.             cout<<')';
  66.         if(lvls[i]==2)
  67.             cout<<'[';
  68.         if(lvls[i]==-2)
  69.             cout<<']';
  70.         if(lvls[i]>=3)
  71.             cout<<'{';
  72.         if(lvls[i]<=-3)
  73.             cout<<'}';
  74.     }
  75.     return 0;
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement