Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- ///////////////////////////////////
- // TASK 10
- //Вводимый текст (например, арифметическое выражение) содержит многократно
- //вложенные круглые скобки. Исправить его, оставив скобки первого уровня
- //круглыми, второго – квадратными, далее – фигурными. Проверять правильность
- //введенной формулы
- ///////////////////////////////////
- using namespace std;
- int main()
- {
- vector<char> str;
- FILE * f;
- string file = "input.txt";
- f = fopen(file, "r");
- while(true)
- {
- char ch =getc(f);
- if(ch==EOF)
- break;
- str.push_back(ch);
- }
- fclose(f);
- int n = str.size();
- deque<int> open;
- int lvls[n]= {0};
- int cur_lvl=0;
- for (int i=0; i<n; i++)
- {
- if(str[i]=='(')
- {
- cur_lvl++;
- open.push_back(i);
- lvls[i] = cur_lvl;
- }
- if(str[i]==')')
- {
- if(open.size()==0)
- {
- cout<<"INCORRECTLY\n";
- return 0;
- }
- else
- {
- int last = open.front();
- open.pop_front();
- lvls[i] = -cur_lvl;
- cur_lvl--;
- }
- }
- }
- if(open.size()>0)
- {
- cout<<"INCORRECTLY\n";
- return 0;
- }
- for (int i=0; i<n; i++)
- {
- if(lvls[i]==0)
- cout<<str[i];
- if(lvls[i]==1)
- cout<<'(';
- if(lvls[i]==-1)
- cout<<')';
- if(lvls[i]==2)
- cout<<'[';
- if(lvls[i]==-2)
- cout<<']';
- if(lvls[i]>=3)
- cout<<'{';
- if(lvls[i]<=-3)
- cout<<'}';
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement