Проверить, является ли введенная скобочная последовательность правильной (рекурсия) - 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; }
Объяснение кода листинга программы
- Вводная часть программы:
- Объявление функции
brackets_check
, которая принимает на вход указатель на строку символов и проверяет, является ли эта строка правильной скобочной последовательностью. - В функции
main
создается буфер для ввода строки. - В основном цикле программы пользователю предлагается ввести строку.
- После ввода каждой строки вызывается функция
brackets_check
, которая проверяет введенную строку. - Если строка является правильной скобочной последовательностью, выводится
OK
. - Если строка не является правильной скобочной последовательностью, выводится
FAIL
.
- Объявление функции
- Рекурсивная часть программы:
- В функции
brackets_check
используется операторswitch
для проверки первого символа строки. - Если первый символ является конечным (пустым) символом, возвращается указатель на этот символ.
- Если первый символ является закрывающей скобкой (')', '}', ']'), возвращается указатель на предыдущий символ.
- Если первый символ является открывающей скобкой ('(','{','['), вызывается рекурсивно функция
brackets_check
для следующей строки и возвращается результат. - Если первый символ не является скобкой, вызывается рекурсивно функция
brackets_check
для следующей строки и возвращается результат.
- В функции
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д