Определить чередуются ли в последовательности гласные и согласные буквы - C (СИ) (75654)
Формулировка задачи:
Решение задачи: «Определить чередуются ли в последовательности гласные и согласные буквы»
#include <stdio.h> #include <string.h> #define VOWELS "AEIOUY" #define FOUND(a) ( strchr(VOWELS, (a)) != NULL ) void flush_input(void) { char c; while ( scanf("%c", &c) == 1 && c != '\n' ) ; } typedef char string_t[256]; #define GET_UPPER(s) ( scanf("%255[A-Z]", (s)) == 1 ) int test(const char * s) { return ( *s == '\0' || *(s+1) == '\0' ) ? 1 : ( FOUND(*s) ^ FOUND(*(s+1)) ) ? test(s+1) : 0; } int main(void) { string_t str; while ( printf("String: ") && GET_UPPER(str) ) { printf("%s\n", ( test(str) ) ? "Ok" : "Fail"); flush_input(); } }
Объяснение кода листинга программы
В этом коде определен прототип функции test
, которая принимает строку в качестве аргумента и возвращает значение типа int
. Эта функция проверяет, чередуются ли гласные и согласные буквы в строке. Функция main
содержит цикл, который запрашивает строку у пользователя, вызывает функцию test
для этой строки и выводит результат на экран.
Код использует макрос VOWELS
, который содержит строку гласных букв (AEIOUY
).
Функция flush_input
используется для очистки ввода от предыдущей строки.
Тип данных string_t
определен как массив символов (char
) с максимальной длиной 256 символов.
Макрос GET_UPPER
используется для чтения строки, состоящей только из заглавных букв.
В цикле while
в функции main
пользователю предлагается вводить строки до тех пор, пока он не введет пустую строку. После каждой итерации цикла вызывается функция flush_input
, чтобы очистить ввод от предыдущей строки.
Функция test
проверяет, является ли текущий символ гласным (FOUND(*s)
), и если да, то проверяет, является ли следующий символ согласным (FOUND(*(s+1))
). Если эти условия выполняются, то функция рекурсивно вызывается для следующей строки (s+1
). Если на каком-то шаге будет обнаружена пара гласных и согласных букв, то функция возвращает значение 1
, иначе возвращается значение 0
.
Если в строке есть только одна буква или пара букв, функция возвращает 1
, так как в этом случае условие *s == '\0' || *(s+1) == '\0'
истинно.
В конце каждой итерации цикла в функции main
на экран выводится результат проверки строки на чередующиеся гласные и согласные буквы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д