Проверить, является ли введенная скобочная последовательность правильной (рекурсия) - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Дано слово из круглых и фигурных скобок. Требуется определить является ли введенное выражение правильным (Надеюсь не требуется объяснять что куда). Надо использовать рекурсию, для выделения подвыражений между одним типом скобок. В общих чертах алгоритм понимаю: берем первую скобку -> ищем ее закрывающую, все что между ними так же по рекурсии. Но код упорно не пишется Подскажите как правильно реализовать. Заранее спасибо

Решение задачи: «Проверить, является ли введенная скобочная последовательность правильной (рекурсия)»

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;
}

Объяснение кода листинга программы

  1. Вводная часть программы:
    • Объявление функции brackets_check, которая принимает на вход указатель на строку символов и проверяет, является ли эта строка правильной скобочной последовательностью.
    • В функции main создается буфер для ввода строки.
    • В основном цикле программы пользователю предлагается ввести строку.
    • После ввода каждой строки вызывается функция brackets_check, которая проверяет введенную строку.
    • Если строка является правильной скобочной последовательностью, выводится OK.
    • Если строка не является правильной скобочной последовательностью, выводится FAIL.
  2. Рекурсивная часть программы:
    • В функции brackets_check используется оператор switch для проверки первого символа строки.
    • Если первый символ является конечным (пустым) символом, возвращается указатель на этот символ.
    • Если первый символ является закрывающей скобкой (')', '}', ']'), возвращается указатель на предыдущий символ.
    • Если первый символ является открывающей скобкой ('(','{','['), вызывается рекурсивно функция brackets_check для следующей строки и возвращается результат.
    • Если первый символ не является скобкой, вызывается рекурсивно функция brackets_check для следующей строки и возвращается результат.

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


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

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

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