Проверить, есть ли слова, начинающиеся и заканчивающиеся гласными - C (СИ)
Формулировка задачи:
дана строка(вводится с клавиатуры), в которой слова разделены пробелами, запятыми, табуляциями или границами строк. нужно вывести "да", если слова, начинающиеся и заканчивающиеся гласными, есть и "нет" - если нет
Помогите, прошу!
Решение задачи: «Проверить, есть ли слова, начинающиеся и заканчивающиеся гласными»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int input_is_vs(FILE* _in){
int c, k, x, y;
const char vs[] = "AEOIUY";
x = y = k = 0;
while(((c = fgetc(_in)) != EOF) && !ferror(_in)){
if(isalpha(c)){
if(++k == 1)
x = toupper(c);
y = toupper(c);
} else if(k > 0){
if((strchr(vs, x) != NULL) && (strchr(vs, y) != NULL))
return 1;
k = x = y = 0;
}
if((c == '\n') || (c == '\r'))
break;
}
return 0;
}
int main(void){
if(input_is_vs(stdin))
puts("yes.");
else
puts("not!");
return 0;
}
Объяснение кода листинга программы
В этом коде проверяется, содержит ли вводимая строка слова, начинающиеся и заканчивающиеся гласными. Вот список действий, которые происходят в коде:
- Включаются необходимые заголовочные файлы:
stdio.hдля работы с вводом/выводомstring.hдля работы со строкамиctype.hдля работы с типами символов
- Определяется функция `input_is_vs
, которая принимает файловый дескриптор в качестве аргумента и проверяет, содержит ли вводимая строка слова, начинающиеся и заканчивающиеся гласными. Функция возвращает1, если такие слова найдены, и0` в противном случае. - В функции
input_is_vsинициализируются следующие переменные:c,k,x,y- используются для отслеживания текущего символа, количества прочитанных символов, начального и конечного символов гласного словаvs- массив, содержащий гласные буквы
- Переменные
x,y,kинициализируются нулями - В цикле
whileсчитываются символы из файла до тех пор, пока не достигнут конец файла или не будет допущена ошибка при чтении - Если текущий символ является буквой, увеличивается счетчик
kи считываются символыxиy(для отслеживания начального и конечного символов гласного слова) - Если
kбольше нуля и символыxиyявляются гласными, функция возвращает1 - Если
kбольше нуля, символыx,y,kсбрасываются в нули - Если текущий символ является символом новой строки или возврата каретки, цикл прерывается
- Функция
mainпроверяет, содержит ли вводимая строка слова, начинающиеся и заканчивающиеся гласными, и выводит соответствующее сообщение на экран - Программа завершается без ошибок