Проверить баланс скобок () [] {} в строке - C (СИ)
Формулировка задачи:
Добрый день, помогите написать программа на Си.
Программа должна проверять баланс скобок.
Например, пользователь вводит: ([hello]) программа выводит: Баланс соблюден
Если пользователь вводит: ([hello) программа выводит: Баланс не соблюден.
Решение задачи: «Проверить баланс скобок () [] {} в строке»
textual
Листинг программы
#include <stdio.h> char * brackets_check(const char * s) { switch ( *s ) { case '\0' : case ')' : case '}' : case ']' : return (char*)s; case '(' : { char * ret = brackets_check(s + 1); return ( *ret == ')' ) ? brackets_check(ret + 1) : (char*)s; } case '{' : { char * ret = brackets_check(s + 1); return ( *ret == '}' ) ? brackets_check(ret + 1) : (char*)s; } case '[' : { char * ret = brackets_check(s + 1); return ( *ret == ']' ) ? brackets_check(ret + 1) : (char*)s; } default : return brackets_check(s + 1); } } int main(void) { char buf[BUFSIZ]; while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' ) printf("%s\n", ( *brackets_check(buf) ) ? "FAIL" : "OK"); return 0; }
Объяснение кода листинга программы
В данном коде реализована функция brackets_check, которая принимает на вход строку и проверяет ее на корректность баланса скобок. Скобки различных типов (), [], {} считаются открывающими, а скобки тех же типов — закрывающими. Список действий, которые выполняются в коде:
- В функции brackets_check происходит проверка строки на корректность баланса скобок.
- Если в строке присутствует символ '\0', то есть строка пустая, то возвращается адрес этого символа.
- Если в строке присутствует закрывающая скобка без соответствующей открывающей, то возвращается адрес закрывающей скобки.
- Если в строке присутствует открывающая скобка без соответствующей закрывающей, то вызывается рекурсивная функция с аргументом s+1, где s — текущий указатель на символ в строке.
- Если в строке присутствуют фигурные скобки, то вызывается рекурсивная функция с аргументом s+1, где s — текущий указатель на символ в строке.
- Если в строке присутствуют квадратные скобки, то вызывается рекурсивная функция с аргументом s+1, где s — текущий указатель на символ в строке.
- Если в строке нет ни одного из перечисленных выше символов, то вызывается рекурсивная функция с аргументом s+1, где s — текущий указатель на символ в строке.
- В основной функции main происходит считывание строки с помощью fgets и вызов функции brackets_check.
- Результат проверки выводится на экран.
- Программа завершается возвратом значения 0.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д