Описать рекурсивную функцию skv, которая подсчитывает количество квадратных скобок в тексте - C (СИ)
Формулировка задачи:
Описать рекурсивную функцию skv, которая подсчитывает количество квадратных скобок (открывающих и закрывающих) в тексте. Текст завершается точкой или вопросительным знаком.
Решение задачи: «Описать рекурсивную функцию skv, которая подсчитывает количество квадратных скобок в тексте»
textual
Листинг программы
#include <ctype.h> #include <stdio.h> enum { BUFFER_SIZE = 100 }; int skv(const char* text) { if (*text == '.' || *text == '?') return 0; if (isdigit(*text)) return -1; if (*text == '[' || *text == ']') { int i = skv(text + 1); if (i == -1) return -1; return i + 1; } return skv(text + 1); } int main() { char s[BUFFER_SIZE]; fgets(s, BUFFER_SIZE, stdin); printf("%d", skv(s)); }
Объяснение кода листинга программы
- Подключение необходимых библиотек:
и . - Объявление константы BUFFER_SIZE равной 100.
- Рекурсивная функция skv, которая принимает на вход указатель на строку text.
- Если символ в строке равен точке или вопросительному знаку, то функция возвращает 0.
- Если символ в строке является цифрой, то функция возвращает -1.
- Если символ в строке равен квадратной скобке или круглой скобке, то функция вызывает саму себя, передавая в качестве аргумента текст, смещенный на единицу вперед, и сохраняет результат в переменную i.
- Если функция вызвала саму себя и результат вызова функции равен -1, то текущая функция возвращает -1.
- Если функция вызвала саму себя и результат вызова функции больше или равен 0, то текущая функция возвращает результат вызова функции плюс единицу.
- Если символ в строке не является квадратной скобкой или круглой скобкой, то функция вызывает саму себя, передавая в качестве аргумента текст, смещенный на единицу вперед.
- В функции main происходит считывание строки с помощью fgets в буфер s.
- Вывод на экран количества квадратных скобок в считанной строке с помощью функции printf.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д