Проверить баланс скобок () [] {} в строке - 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, которая принимает на вход строку и проверяет ее на корректность баланса скобок. Скобки различных типов (), [], {} считаются открывающими, а скобки тех же типов — закрывающими. Список действий, которые выполняются в коде:

  1. В функции brackets_check происходит проверка строки на корректность баланса скобок.
  2. Если в строке присутствует символ '\0', то есть строка пустая, то возвращается адрес этого символа.
  3. Если в строке присутствует закрывающая скобка без соответствующей открывающей, то возвращается адрес закрывающей скобки.
  4. Если в строке присутствует открывающая скобка без соответствующей закрывающей, то вызывается рекурсивная функция с аргументом s+1, где s — текущий указатель на символ в строке.
  5. Если в строке присутствуют фигурные скобки, то вызывается рекурсивная функция с аргументом s+1, где s — текущий указатель на символ в строке.
  6. Если в строке присутствуют квадратные скобки, то вызывается рекурсивная функция с аргументом s+1, где s — текущий указатель на символ в строке.
  7. Если в строке нет ни одного из перечисленных выше символов, то вызывается рекурсивная функция с аргументом s+1, где s — текущий указатель на символ в строке.
  8. В основной функции main происходит считывание строки с помощью fgets и вызов функции brackets_check.
  9. Результат проверки выводится на экран.
  10. Программа завершается возвратом значения 0.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.714 из 5
Похожие ответы