Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <conio.h> // для функции gets
- #define n 100 // максимальная длина строки
- int main(){
- int i = 0, max = -1, s[n]; // мах имеет значение -1, и почему так будет позже. последняя переменная для индексов открывающих скобок
- char string[n], open[3][2] = {"(", "{", "["}, close[3][2] = {")", "}", "]"}; // сама строка и массивы со скобками
- printf("Vvedite stroku: ");
- gets(string); // функция для ввода строк с пробелами. по идее не должно быть вопросов у препода
- while(string[i] != '\0'){ // любая строка кончается символом \0, так сказать проверяем строку, пока не встретится конец
- int in_open = 0, in_close = 0, j, oi, ci; // логические переменные, чтобы узнать, принадлежит ли текущий символ одному из массивов
- // по названию думаю понятно. j для цикла. oi и ci - open_index, close_index - индексы скобок в массивах (open/close)
- for(j = 0; j < 3; j++) // проверка на входимость текущего символа строки в массив открывающих скобок
- if(string[i] == open[j][0]){
- in_open = 1; // если соответствует одной из скобок, то логическая переменная = 1
- oi = j; // присвоение индекса скобки
- break; // и выход из цикла проверки
- }
- if(in_open){ // если символ входил в открывающие скобки
- s[++max] = oi; // заполняем первый элемент. для этого нужно было в начале мах = -1 ( если не знаешь, чем отличается ++х от х++ напишешь)
- i++; // переходим к следущему символу
- continue; // и пропускаем то, что будет дальше. ведь если текущий символ - открывающая скобка, то он не может быть закрывающей
- }
- for(j = 0; j < 3; j++) // аналогично проверяем символ на закрывающую скобку.
- if(string[i] == close[j][0]){
- in_close = 1;
- ci = j;
- break;
- }
- if(!in_close){ // если текущий символ не скобка - идем дальше.
- i++;
- continue;
- }
- if(s[max] != ci){ // теперь самое главное. если индекс последней открывающей скобки не равен индексу текущей закрывающей (поэтому они симметричны)
- printf("Balans ne soblyuden!\n"); // выводим отрицательный результат
- return 0; // и завершаем работу программы, потому что дальше проверять нечего. ведь уже не верно, смысла нет
- }
- else max--; // если все четко, считаем, что последняя открывающая скобка нас больше не интересует
- i++; // это на случай, если текущий символ вообще не является никакой скобкой или только что выполнилась эта строка - else max--;
- }
- printf("Balans soblyuden!\n"); // если цикл выполнился до конца строки и программа дошла до этой строки - значит баланс соблюден.
- return 1; // ну и завершение программы. можешь поставить числа одинаковые. вот тебе наглядное объяснение зачем нужен ретурн.
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement