Задача: Скобки. Текст ( например, арифметическое выражение) содержит многократно вложенные круглые скобки. Исправить его, оставив скобки первого уровня круглыми, второго — заменить на квадратные, третьего и последующих — на фигурные. Убедиться в корректности использования скобок.
Тесты:
Введенная строка | Выведенная строка |
ln(sin((a+b)c-d)) | ln{sin[(a+b)c-d]} |
ln(sin((a+b)c-d))+ln(sin((a+b)c-d)) | ln{sin[(a+b)c-d]}+ln{sin[(a+b)c-d]} |
cos((a-b)c) | cos[(a-b)c] |
Код string
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
#include <string> #include <iostream> using namespace std; int main() { string s; cin >> s; int l = 0; int maxl = 0; for( int i = 0 ; i < s.length() ; i++ ) { if( s[i] == '(' ) { s[i] = '{'; l++; if( l > maxl ) { maxl = l; } } if( s[i] == ')' ) { s[i] = '}'; l--; } } for( int i=0 ; i < s.length() ; i++ ) { if( s[i] == '{' ) { l++; if( l == maxl ) s[i] = '('; if( l == maxl-1 ) s[i] = '['; } if( s[i] == '}' ) { if( l == maxl ) s[i] = ')'; if( l == maxl-1 ) s[i] = ']'; l--; } } cout << s << endl; } |
Код c-string
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
#include <cstring> #include <iostream> using namespace std; int main() { char s[100]; cin >> s; int l = 0; int maxl = 0; for( int i=0 ; i < strlen(s); i++ ) { if( s[i] == '(' ) { s[i] = '{'; l++; if( l > maxl ) { maxl = l; } } if( s[i] == ')' ) { s[i] = '}'; l--; } } for( int i=0 ; i < strlen(s); i++ ) { if( s[i] == '{' ) { l++; if( l == maxl ) s[i] = '('; if( l == maxl-1 ) s[i] = '['; } if( s[i] == '}' ) { if( l == maxl ) s[i] = ')'; if( l == maxl-1 ) s[i] = ']'; l--; } } cout << s << endl; } |
Ссылки на коды:
Ход решения:
Вводим строку. Задаем две переменные: l — уровень вложенности скобок и maxl — максимальный уровень вложенности скобок. Делаем цикл в котором заменяем все ‘(‘ , ‘)’ скобки на ‘{‘ , ‘}’. Делаем второй цикл в котором меняем скобки, которые являются последними по уровню вложенности на ‘(‘, ‘)’ и скобки, стоящие на уровень ниже меняем на ‘[‘, ‘]’, все остальные скобки оставляем без изменений.
Напрасно отказались защищать свою работу на экзамене. Если выполнено самостоятельно, то ответить на вопросы можно легко.
Я почему-то был уверен, что на экзамене Вы доберётесь до отличной оценки.