Описать рекурсивную функцию 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.